在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