JAVA获取真实IP地址(代理、F5、WebLogic、Apache)

本文提供了一个Java函数,用于从HTTP请求中获取实际的客户端IP地址,通过检查多个可能的头信息并优先级排序来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public static String getRealIp(HttpServletRequest req, HttpServletResponse resp) {  
  
    String ip = req.getHeader("X-Forwarded-For");  
  
    if (ip != null) {  
        if (ip.indexOf(',') == -1) {  
            return ip;  
        }  
        return ip.split(",")[0];  
    }  
  
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = req.getHeader("Proxy-Client-IP");  
    }  
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = req.getHeader("WL-Proxy-Client-IP");  
    }  
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  
        ip = req.getRemoteAddr();  
    }  
  
    return ip;  
}  

 

<think>嗯,用户问的是关于东方通部署前端包,后端直接用java -jar运行却访问不到后端的问题。首先,我需要先理解东方通是什么。东方通通常指的是中间件产品,比如TongWeb,类似于Tomcat或者WebLogic的应用服务器。用户可能是在TongWeb上部署了前端应用,然后后端用Spring Boot之类的打成jar包,用java -jar启动,但前后端无法通信。 接下来,可能的问题点有很多。首先,网络连通性,比如后端服务是否真的在运行,端口是否正确,防火墙有没有阻挡。然后,跨域问题,前端和后端不同端口或域名,浏览器安全策略阻止请求。配置错误,比如前端配置的后端地址不对,或者后端服务绑定到了localhost而不是0.0.0.0,导致外部无法访问。还有可能,东方通的某些配置限制,比如反向代理设置不对,或者安全策略拦截了请求。 需要一步步排查。先确认后端服务是否正常启动,检查日志有没有错误,用curl或者postman直接访问后端接口看是否通。如果后端本地能访问,外部不行,可能是绑定地址的问题,改成0.0.0.0。然后检查前端配置的API地址是否正确,端口是否匹配。如果跨域,需要后端配置CORS。东方通方面可能需要设置反向代理,把前端请求转发到后端,或者检查TongWeb的访问日志,看是否有请求被拦截。 另外,还要考虑是否有安全组或防火墙规则,比如云服务器的安全组设置,或者本地防火墙是否开放了后端端口。最后,查看浏览器控制台报错信息,看是网络错误还是CORS问题,帮助定位具体原因。</think>东方通中间件部署前端包,后端通过`java -jar`运行但访问不到的问题,可能由以下原因导致。请按步骤排查: --- ### 一、基础网络连通性检查 1. **后端服务是否存活** - 执行 `ps -ef | grep java` 或 `jps` 确认进程是否存在。 - 检查启动日志是否有异常:`tail -f nohup.out` 或日志文件。 2. **端口监听状态** - 执行 `netstat -tunlp | grep <端口号>` 确认后端服务监听的端口是否开放。 - 若服务绑定到 `127.0.0.1`(仅本地访问),需改为 `0.0.0.0`。 示例启动命令: ```bash java -jar yourapp.jar --server.address=0.0.0.0 --server.port=8080 ``` --- ### 二、跨域问题(CORS) 1. **现象** - 前端浏览器控制台报错 `CORS policy blocked`。 - 后端日志显示 `OPTIONS` 请求返回 `403`。 2. **解决方案** - **后端配置 CORS**(Spring Boot 示例): ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") // 或指定前端域名 .allowedMethods("GET", "POST", "PUT", "DELETE") .allowCredentials(true); } } ``` - **东方通反向代理**:通过 TongWeb 配置反向代理,将前后端统一到同域下。 --- ### 三、东方通配置问题 1. **前端包部署路径冲突** - 检查 TongWeb 的 `webapps` 目录是否已存在同名应用,导致路径覆盖。 - 建议清理旧部署文件,重启 TongWeb。 2. **反向代理未生效** - 若通过 TongWeb 代理后端请求,需确认 `server.xml` 或管理控制台的代理配置,例如: ```xml <Host name="localhost" appBase="webapps"> <Context path="/api" docBase="" > <Valve className="org.apache.catalina.valves.rewrite.RewriteValve" config="/opt/TongWeb/conf/rewrite.config"/> </Context> </Host> ``` - 在 `rewrite.config` 中配置转发规则(示例): ```conf RewriteRule ^/api/(.*) http://localhost:8080/$1 [P] ``` --- ### 四、安全策略限制 1. **防火墙/安全组拦截** - 检查服务器防火墙:`iptables -L -n` 或 `firewall-cmd --list-all`。 - 云服务器需确认安全组是否开放后端端口(如 8080)。 2. **东方通自身安全策略** - 检查 TongWeb 的 `security-constraint` 配置,确认未拦截请求。 --- ### 五、前端配置问题 1. **API 地址错误** - 检查前端代码中请求的后端地址是否指向实际端口(如 `http://后端IP:8080/api`)。 - 若通过域名访问,确认 DNS 解析正确。 2. **静态资源未更新** - 清理浏览器缓存,或强制刷新(`Ctrl+F5`)。 --- ### 六、调试建议 1. **直接测试后端接口** ```bash curl http://localhost:8080/health ``` 2. **查看 TongWeb 访问日志** 日志路径通常为 `logs/access_log.*`,观察请求是否到达。 --- ### 总结流程图 ```plaintext 1. 后端存活? → 否 → 检查启动命令/日志 → 是 → 检查端口绑定(0.0.0.0?) 2. 端口可达? → 否 → 防火墙/安全组 → 是 → 检查跨域配置 3. 前端请求地址正确? → 否 → 修正 API 路径 → 是 → 检查东方通反向代理 ``` 按此流程排查,可覆盖 90% 的常见问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值