在apache2.2+Weblogic 10g整合系统中,apache会对request对象进行包装,附加一些WLS要用的头信息。这种情况下,
直接用request.getRemoteAddr()是无法取到真正的客户IP的。
apache会增加下列头信息:
X-Forwarded-For=211.161.1.239
WL-Proxy-Client-IP=211.161.1.239
方案1:
所取得客户的IP需要这样:
String ip=request.getHeader("X-Forwarded-For");
if(ip == null || ip.length() == 0) {
ip=request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0) {
ip=request.getRemoteAddr();
}
方案2:
也可通过weblogic的设置直接能过request.getRemoteAddr();取得客户的IP。
进入weblogic控制台,找到
domain->Environment->Servers->yourServerName
找到Advanced连接,并点击,在后续页面上
找到 WebLogic Plug-In Enabled 选项,并选中,保存。
该选项要求重启weblgoic才生效。
如果该选项不可选,点击左上的“Lock & Edit”按钮,就可以选了。
但是如果apache设置的是反向代理这样就不行了,因为apache不会向heaer写入WL-Proxy-Client-IP的信息。只能通过第一种方法解决。
我通过方案2解决了这个问题,并且在Windows和Linux下都测试通过,另外如果Weblogic是集群的话,要每个节点里的WebLogic Plug-In Enabled都选上才行。
方案1未验证。
原文地址:http://blog.sina.com.cn/s/blog_4b312fc20100e5bm.html
在Apache2.2+WebLogic10g整合系统中,因Apache对request对象进行了包装,直接使用request.getRemoteAddr()无法获取真实客户端IP。本文介绍了两种解决方案:一是通过解析特定的HTTP头部信息来获取;二是配置WebLogic启用插件支持,从而直接通过request.getRemoteAddr()获取客户端IP。
5190

被折叠的 条评论
为什么被折叠?



