`
hai0378
  • 浏览: 532152 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

servlet 取IP (跳过代理服务器)

阅读更多
在IIS+Weblogic整合系统中,像移动网关一样,iisforward这个ISAPI过滤器也会对request对象进行再包装,附加一些WLS要用的头信息。这种情况下,直接用request.getRemoteAddr()是无法取到真正的客户IP的。

实际的iisforward附加头如下:

WL-Proxy-Client-IP=211.161.1.239
Proxy-Client-IP=211.161.1.239
X-Forwarded-For=211.161.1.239
WL-Proxy-Client-Keysize=
WL-Proxy-Client-Secretkeysize=
X-WebLogic-Request-ClusterInfo=true
X-WebLogic-KeepAliveSecs=30
X-WebLogic-Force-JVMID=-327089098
WL-Proxy-SSL=false

综上,正确作法如下:
public String getIpAddr(HttpServletRequest request) {
    String ip=request.getHeader("X-Forwarded-For");
    if(ip == null || ip.length() == 0) {
        ip=request.getHeader("Proxy-Client-IP");
    }
    if(ip == null || ip.length() == 0) {
        ip=request.getHeader("WL-Proxy-Client-IP");
    }
    if(ip == null || ip.length() == 0) {
        ip=request.getRemoteAddr();
    }
    return ip;
}

如此一来,就可适应各种情况,包括通过移动网关访问(会附加X-Forwarded-For)。通过这个简单例子可以看出封装和抽象的重要性。
分享到:
评论

相关推荐

    Java获取服务器IP及端口的方法实例分析

    这段代码遍历所有网络接口,跳过无效、回环和虚拟接口,然后筛选出本地站点的IP地址。 3. **获取应用的路径**: - 在JSP和Servlet中,可以通过`request.getRequestURI()`获取请求的URI,`application.getRealPath...

    Android-JavaWeb程序运行说明文档

    - 如果项目不包含网页端,则跳过此步骤,直接进行下一步骤。 #### 3.3 测试App功能 - 使用雷电模拟器或其他Android模拟器运行App,检查其能否正常登录并使用。 - 如果没有App,可直接执行下一步骤。 #### 3.4 ...

    javaweb课程设计基础知识+教程+课件_MySQL安装图解.doc

    5. 安装完成后,跳过注册步骤,继续安装过程。 接下来是MySQL的配置环节: 1. 启动配置向导,选择“Detailed Configuration”以便详细配置。 2. 选择服务器类型,根据实际需求,如开发环境选择“Developer Machine...

    dubbo、dubbo-admin

    进入解压后的dubbo-admin目录,执行`mvn package -Dmaven.skip.test=true`,这会跳过测试并生成war文件。 3. **配置与启动**: - 将生成的war文件(或者预编译的war)拷贝到Web服务器的webapps目录下,启动Web...

    2021-2022计算机二级等级考试试题及答案No.13627.docx

    12. 自动增长属性:在MySQL或类似的数据库系统中,`AUTO_INCREMENT`会自动为新插入的记录提供唯一值,即使插入指定的ID,也会跳过。 13. Java类与对象:成员变量在对象初始化后通常是不可修改的。 14. Web服务器...

    jenkins配置

    这条命令指定了部署到Tomcat的方式以及跳过单元测试等参数。根据不同的操作系统环境,可能需要对这条命令做适当的调整。 通过以上五个步骤的详细配置,我们可以实现Jenkins与Tomcat之间的自动化部署流程。这不仅...

    asianux系统安装与apache-tomcat-7.0.59安装

    - 跳过CD检查 - 选择语言(简体中文) - 创建分区并格式化 - 创建/boot(100MB) - 创建swap(至少等于内存大小) - 创建/home(55%-60%的磁盘空间) - 其余空间挂载到"/" **网络配置:** 1. 修改IP地址、...

    Spring+Struts2+ibatis 异地登录 HttpSessionBindingListener

    2. **IP地址检查**:记录用户的登录IP地址,当发现新登录请求的IP与当前session的IP不匹配时,认为是异地登录。 3. **心跳机制**:定期发送心跳请求保持session活跃,一旦检测到两个心跳源,表明存在异地登录。 4....

    2021-2022计算机二级等级考试试题及答案No.19558.docx

    4. PowerPoint文本效果:在PowerPoint中,设置文本字体时,用户可以选择各种效果,如阴影、发光、斜体等,也可以直接跳过这些效果直接设置基础样式。 5. VFP常量类型:Visual FoxPro(VFP)中的常量类型包括数值型...

    2021-2022计算机二级等级考试试题及答案No.4674.docx

    7. **continue语句**:在循环体中,continue语句用于跳过当前循环的剩余部分,直接进入下一次循环,而不是结束整个循环。 8. **Servlet多线程处理**:当多个客户端请求一个Servlet时,服务器通常会复用同一个...

    2021-2022计算机二级等级考试试题及答案No.1505.docx

    14. 数据表中执行`listnext5`后,当前记录会跳过5条,变为第15条,但题目选项中没有15,所以是第14条。 15. `TRUE`不是Java的关键字,而是一个布尔常量。 16. 栈是一种后进先出(LIFO)的线性数据结构,用于临时...

    225道Java面试题 学会了Java面试随你问.docx

    Java面试题涵盖了许多核心概念和框架,以下是这些题目所涉及的知识点的详细解析: 1. **J2EE**:Java企业版(Java ...44. **try-catch-finally**:try中有return,finally仍会执行,但catch中的return会被跳过。

    jsp开发讲义

    需要注意的是,如果程序没有更新,则下次访问会直接跳过前两个阶段进入执行阶段,这也是为什么首次访问的时间会较长的原因。 ##### JSP指令 JSP指令用于定义整个页面或页面部分的行为特征,主要有以下几种类型: 1...

    2021-2022计算机二级等级考试试题及答案No.3542.docx

    continue跳过当前循环剩余部分,进入下一次循环;return语句结束当前方法并返回结果(如果有的话)。 7. 文件列表框属性:Pattern属性用于设置文件列表框显示的文件模式,比如只显示特定扩展名的文件。 8. Word...

    2021-2022计算机二级等级考试试题及答案No.5293.docx

    在循环结构中,`continue` 语句的作用是跳过本次循环剩余的部分,直接进入下一次循环。它并不会结束整个循环的执行,因此题目中的描述 “循环体中 `continue` 语句的作用是结束整个循环的执行” 是错误的。 #### 6....

    JavaScript实现x秒后自动跳转到一个页面

    这个方法通常在服务器端使用,例如在Java的Servlet中。`response.sendRedirect()`函数用于重定向用户的浏览器到指定的URL。例如: ```java response.sendRedirect("目标页面.jsp"); ``` 这种方式不适用于...

    笔试型_J2EE初级技术面试题目

    `continue`则是跳过循环体中的剩余部分,直接进入下一次循环的条件判断阶段。 #### 3. 集合框架体系简介 Java集合框架由多个接口和实现类组成,主要包括Collection和Map两大分支。Collection接口下有List、Set等子...

    使用Canal监听数据库配置时所报的异常记录

    - 如果你启用了`skip-grant-tables`,这将跳过权限检查,仅用于调试或初始化。在生产环境中,应关闭此选项并确保使用正确的用户权限。 4. **Docker部署**: - 如果你使用Docker部署Canal和MySQL,确保两个容器...

Global site tag (gtag.js) - Google Analytics