Webアプリケーションがあり、そのために、WebサイトにアクセスしているクライアントのIPアドレスを取得して、アプリケーションに最もアクセスしている地域を把握したいと考えています。私はJava EE
自分のアプリケーションで使用しています。
request
ヘッダーとエンドユーザーからの送信時期について話す場合は、おそらくいくつかの解決策があります。
Webアプリケーションがあり、そのために、WebサイトにアクセスしているクライアントのIPアドレスを取得して、アプリケーションに最もアクセスしている地域を把握したいと考えています。私はJava EE
自分のアプリケーションで使用しています。
request
ヘッダーとエンドユーザーからの送信時期について話す場合は、おそらくいくつかの解決策があります。
インターフェースServletRequestからメソッドgetRemoteAddr()を使用するか、インターフェースHttpServletRequestからメソッドgetHeaders()を使用します。
HttpServletRequest httpRequest = (HttpServletRequest) request;
String userIpAddress = httpRequest.getHeader("X-Forwarded-For");
メソッドgetRemoteAddrを使用する際の注意点が 1 つあります。
確かにこの方法を使用でき、通常はクライアントの IP を取得できます。ただし、ユーザーがプロキシの背後にいる場合、この方法は役に立ちません。この場合、クライアントではなく、プロキシ サーバーの IP アドレスを取得します。ただし、プロキシは、要求元のクライアント IP を特別なHTTP
ヘッダーに含める場合があります。したがって、実際のクライアント IP 呼び出しメソッドを取得するにはgetHeader("X-Forwarded-For")
.
JSP での使用例:
JSTLを使用したセッションで IP アドレスの設定値を使用します。
<c:set var="userIp" value="${requestScope.header('x-forwarded-for')}" scope="session" />
そして、便利な場所でセッションからこの値を取得します。
JSPでは<c:out value="${sessionScope.userIp}" />
、またはサーブレットで次のように使用できますsession.getAttribute('userIp');
ドキュメントを読んでください:
java.lang.String getRemoteAddr()は、要求を送信したクライアントまたは最後のプロキシのインターネット プロトコル (IP) アドレスを返します。
上記の回答(AndreyとStephenによる)に加えて、いくつかのanalytics
ツールも使用します。それはあなたのウェブサイトに来るトラフィックの全体像を提供します. そのような例の 1 つがGoogle アナリティクスです。
リクエスト オブジェクトは、JSP から生成されたサーブレット メソッドに Java 引数として渡されます。引数の名前は ... 待って ... ですrequest
。
したがって、JSP に埋め込まれたスクリプトレットで参照できるはずです。例えば
<%
InetAddress addr = request.getRemoteAddr();
// blah blah blah
%>
この種のことを JSP で行うべきかどうかは議論の余地があります。一般に、JSP は出力の書式設定にのみ使用することが「ベスト プラクティス」として受け入れられています。webapp のビジネス ロジックはコントローラ サーブレットにある必要があります。コントローラ サーブレットは最終的に JSP サーブレットに転送して HTML (またはその他のもの) を生成します。
ビジネス ロジックを JSP に入れる場合、スクリプトレットは保守が難しくなる傾向がありますが、IP アドレスを表示するだけであれば問題ありません。(エンジニアリングの観点から推奨されるアプローチは、タグと JSP 式言語を使用することです。)
最後に、 によって返される IP アドレスgetRemoteAddr()
が実際のクライアント IP アドレスになるという保証はありません。プロキシのアドレスである可能性もあれば、完全な捏造である可能性もあります。