webserivce 如何获取request ,获取真实访问的IP

JunZiLianJH 2018-11-30 03:22:23


Message message = PhaseInterceptorChain.getCurrentMessage();
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);

通过这样获取 PhaseInterceptorChain.getCurrentMessage() == null 是什么问题导致呢,需要配置些什么
...全文
156 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
JunZiLianJH 2018-11-30
  • 打赏
  • 举报
回复
我用其他机器,访问我的服务还是获取我本地的ip
逆行而上 2018-11-30
  • 打赏
  • 举报
回复
public static String getClientIpAxis() {
MessageContext mc = null;
HttpServletRequest request = null;
try {
mc = MessageContext.getCurrentContext();
if (mc == null)
throw new Exception("无法获取到MessageContext");
request = (HttpServletRequest) mc
.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
log.info("前置机ip地址:" + request.getRemoteAddr());
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return request.getRemoteAddr();
}
逆行而上 2018-11-30
  • 打赏
  • 举报
回复
好吧,不好意思哈,刚又看了下,你的是webserivce
JunZiLianJH 2018-11-30
  • 打赏
  • 举报
回复
没有用spring
逆行而上 2018-11-30
  • 打赏
  • 举报
回复
HttpServletRequest request =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
这样不能拿么?
JunZiLianJH 2018-11-30
  • 打赏
  • 举报
回复
所以我想通过上面的方式获取request
JunZiLianJH 2018-11-30
  • 打赏
  • 举报
回复
HttpServletRequest request = (HttpServletRequest) msgeContex.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST); 通过这种方式拿的request,但是获取的ip不是真实的
summer917_ 2018-11-30
  • 打赏
  • 举报
回复
public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
逆行而上 2018-11-30
  • 打赏
  • 举报
回复
你的request拿不到么?不是可以再controller层获取吗?
JunZiLianJH 2018-11-30
  • 打赏
  • 举报
回复
引用 2 楼 逆行而上 的回复:
直接复制测试就可以了
试过了,不行 我是在接口端,要先获取request才行
逆行而上 2018-11-30
  • 打赏
  • 举报
回复
直接复制测试就可以了
逆行而上 2018-11-30
  • 打赏
  • 举报
回复
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
if (ipAddress == null || ipAddress.length() == 0
|| "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0
|| "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0
|| "unknown".equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
if (ipAddress.equals("127.0.0.1")
|| ipAddress.equals("0:0:0:0:0:0:0:1")) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ipAddress = inet.getHostAddress();
}
}
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()
// = 15
if (ipAddress.indexOf(",") > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧