How to determine by what IP Address my website has been accessed? [duplicate]

旧城冷巷雨未停 提交于 2019-12-18 04:12:49

问题


I have a web application and for that I want to capture the IP address of the clients who are accessing my website so that I can know what region is the most accessing the application. I am using Java EE in my application.

Probably there is some solution if we talk about header and when request is sent from the end-user.


回答1:


Use method getRemoteAddr() from interface ServletRequest or methods getHeaders() form interface HttpServletRequest:

HttpServletRequest httpRequest = (HttpServletRequest) request;
String userIpAddress = httpRequest.getHeader("X-Forwarded-For");

There's one caution for using the method getRemoteAddr:

Sure you can use the method and in general case you will get IP of client. However, the method is useless if an user is behind a proxy. In this case you'll get the proxy server's IP address and not the client. But the proxy may include the requesting client IP in a special HTTP header. So to retrieve real-client-IP call method getHeader("X-Forwarded-For").

An example usage in JSP:

Use set value of IP address in session using JSTL:

<c:set var="userIp" value="${requestScope.header('x-forwarded-for')}" scope="session" />

And then get this value from the session in a convenient place.

In JSP you can use <c:out value="${sessionScope.userIp}" /> or in servlet as session.getAttribute('userIp');

Please read docs:

java.lang.String getRemoteAddr() returns the Internet Protocol (IP) address of the client or last proxy that sent the request.




回答2:


Along with the above said answers (by Andrey and Stephen) do use some analytics tool also. It will give you a bigger picture of the traffic coming to your website. One such example is Google Analytics.




回答3:


The request object is passed as a Java argument to the servlet method generated from your JSP. The argument's name is ... wait for it ... request.

So you should be able to refer to it in a scriptlet embedded in your JSP; e.g.

    <%
         InetAddress addr = request.getRemoteAddr();
         // blah blah blah
    %>

It is debatable whether you should be doing this kind of thing in a JSP. It is generally accepted as "best practice" that JSPs should only be used for formatting output. The business logic of a webapp should be in a controller servlet that then finally forwards to the JSP servlet to generate the HTML (or whatever).

If you are going to put business logic into a JSP, scriptlets tend to be difficult to maintain ... though if you are just going to display the IP address, that shouldn't be a concern. (The preferred approach from an engineering perspective is to use tags and JSP expression language.)

Finally, there is no guarantee that the IP address returned by getRemoteAddr() will be the actual client IP address. It could be the address of a proxy, or even a complete fabrication.



来源:https://stackoverflow.com/questions/12107739/how-to-determine-by-what-ip-address-my-website-has-been-accessed

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!