java如何获取https协议的客户端ip地址

java如何获取https协议的客户端ip地址,第1张

嗨 你好

据网上了解到:

在JSP里,获取客户端的IP地址的方法是:requestgetRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将>

servlet有两种配置的方法

1在webxml文件中配置

<servlet>

<servlet-name>loginServlet</servlet-name>

<servlet-class>comhwuaservletLoginServlet</servlet-class></servlet><servlet-mapping>

<servlet-name>loginServlet</servlet-name>

<url-pattern>/login</url-pattern></servlet-mapping>

2在servlet中用Java注解的方式配置

使用注解配置Servlet的步骤:

1 在Servlet类上贴@WebServlet注解2 在webxml文件中进行如下的配置

metadata-complete="true":表示是否忽略Servlet上面的注解

metadata-complete="false"表示是否不忽略Servlet上面的注解,缺省值

二、servlet生命周期

public void init(ServletConfig config):初始化方法,在第一次请求时调用,只在最初的时候调用一次

public void service(ServletRequest req, ServletResponse res):服务方法

public void destroy():销毁方法

三、在webxml文件中设置/获取初始化参数

1作用域当前的servlet 写在servlet标签中

<init-param>

   <param-name>name</param-name>

   <param-value>admin</param-value></init-param>

过去参数 在init方法中

String name = configgetInitParameter("name");

2上下文参数 写在web-app标签中

<context-param>

   <param-name>driver</param-name>

   <param-value>oraclejdbcOracleDriver</param-value></context-param>

获取参数 在init方法中

   ServletContext servletContext = configgetServletContext();

   String initParameter = servletContextgetInitParameter("driver");

四、设置servlet启动的时间

默认情况下servlet是在第一次被请求时启动的

通过在webxml文件中设置

<load-on-startup>1</load-on-startup>

注意:

load-on-startup 的参数是大于等于0的 负数没有效果load-on-startup 必须在参数init-param标签的下面 否则init-param会失效

五、常用方法:

  String getContextPath():获取上下文路径,<Context path="上下文" />

  String getHeader(String headName):根据指定的请求头获取对应的请求头的值   String getRequestURI():返回当期请求的资源名称  上下文路径/资源名

  StringBuffer getRequestURL():返回浏览器地址栏的内容   String getRemoteAddr():返回请求服务器的客户端的IP

六、获取请求参数的方法:

String getParameter(String name):根据参数名称,获取对应参数的值String[] getParameterValues(String name):根据参数名称,获取该参数的多个值

Enumeration<String> getParameterNames():获取所有请求参数的名字Map<String,String[]> getParameterMap():返回请求参数组成的Map集合

   key:参数名称

   value:参数值,封装在String数组中

问题引出:

<hr/>

在JSP里,获取客户端的IP地址的方法是:requestgetRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 requestgetRemoteAddr()方法获取的IP地址是:127001或 1921681110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的>

举例来说,当我们访问口碑网首页hangzhoujsp时,其实并不是我们浏览器真正访问到了服务器上的hangzhoujsp 文件,而是先由代理服务器Nagix去访问hagnzhoujsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问hangzhoujsp的,所以hangzhoujsp中通过 requestgetRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

<hr/>

获得客户端真实IP地址的方法一:

public String getRemortIP(>

if (requestgetHeader("x-forwarded-for") == null) {

return requestgetRemoteAddr();

}

return requestgetHeader("x-forwarded-for");

}

<hr/>

获得客户端真实IP地址的方法二

public String getIpAddr(>

String ip = requestgetHeader("x-forwarded-for");

if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {

ip = requestgetHeader("Proxy-Client-IP");

}

if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {

ip = requestgetHeader("WL-Proxy-Client-IP");

}

if(ip == null || iplength() == 0 || "unknown"equalsIgnoreCase(ip)) {

ip = requestgetRemoteAddr();

}

return ip;

}

<hr/>

以上就是关于java如何获取https协议的客户端ip地址全部的内容,包括:java如何获取https协议的客户端ip地址、怎么配置servlet、如何获取网站用户的真实IP等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9752641.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存