私はこの問題の解決策を探していましたが、成功しませんでした。私が見つけた最新の投稿は 2010 年のものです。グリズリー 2.2.1 が埋め込まれた jersey 1.12 を使用しています。
私の理解が正しければ、ジャージー リソースをサーブレット コンテナーの下にデプロイしない限り、それらに HttpServletRequest を注入することはできません。回避策はありますか?
以下を使用します。
@Context org.glassfish.grizzly.http.server.Request req
使用例:
@Path("/example")
public class SomeResource {
@POST
@Consumes("application/x-www-form-urlencoded")
public void someMethod(@Context Request req) {
System.out.println(req.getRemoteAddr());
}
}
私の場合、nginx の背後でロード バランサーとして実行されているスタンドアロンの Jersey クラスターがありました。したがって、回避策は、Jersey からも簡単にアクセスできるリモート アドレスをリクエスト ヘッダーとして渡すことでした。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;