2017-07-20 2 views
0

プログラムでリクエスト(HttpServletRequest?)を取得する方法はありますか?私はエンドポイントメソッド/クラスのアノテーションでそれを行う方法しか見つけることができません。 https://stackoverflow.com/a/5118844/190164パーJerseyはプログラムでリクエストオブジェクトを取得します

私は自分のエンドポイントに注釈付き引数を追加することができます。

@POST 
@Path("/test") 
@Produces(MediaType.APPLICATION_JSON) 
public String showTime(
    @Context HttpServletRequest httpRequest 
) { 
    // The method body 
} 

または私は(https://stackoverflow.com/a/26181971/190164

パブリッククラスmyresourceで{

@Context 
    private HttpServletRequest httpRequest; 

    @GET 
    public Response foo() { 
    httpRequest.getContentType(); //or whatever else you want to do with it 
    } 
} 

しかし、クラス内に注入することができますI Jerseyに直接リンクしていない別のクラスのリクエストへのアクセスを希望します。クラスがJerseyによってインスタンス化されていないので、上記の2番目の例のように@Context注入を追加することはできません。私は

HttpServletRequest.getCurrentRequest() 

ような何かをできるようにしたいのですが、私はどこか任意の静的メソッドを見つけることができませんでした。

+0

コードでもっと明確にしたり、コードを書こうとしたりできますか? – MrMisery

+0

@MrMiseryにいくつかの例が追加されました – zacaj

+0

アクセスしたい場所とJerseyリソースに接続する方法を正確に表示してください –

答えて

1

あなたは、サーブレット・フィルターを使用することができ、いくつかのセキュリティソリューションを探しています(Filterを実装するクラスを作成する)か、ContainerRequestFilterを実装することができますし、filterをオーバーライドすることにより、あなたは.Outsideは、コンテキスト要素が常にでのみアクセス可能フィルタリングあなたのフィルタリングを行うことができる場合このことができます

@Context 
private HttpServletRequest httpRequest; 

    @GET 
    public Response foo() { 
    someMethod(httpRequest); //or whatever else you want to do with it 
    } 
} 

希望:コントローラは、(あなたはパスの注釈を置く場合)、目的のメソッドやオブジェクトに渡す以外のコントローラの外部からこのタイプのコンテンツにアクセスする方法はありません。

+0

私はセキュリティを何もしていません。私はいくつかのことでこれをしたいと思っていましたが、最も簡単なのは、私があなたのメソッドにパラメータとして渡すことができることを私が指摘したように、私のログにリクエストURLを含めたいと思ったということです。 – zacaj

+0

私はあなたのことを完全に理解していなかったので、この方法も簡単です。 – MrMisery

+0

私は特に私のリソースにそれを渡したくありません。私はそれを少なくとも50の関数に渡す必要があるでしょう – zacaj

関連する問題