获取客户端IP地址package com.gmk.kpi.common.utils;import JAVAx.websocket.RemoteEndpoint;import javax.websocket.Session;import java.lang.reflect.Field;import java.net.InetSocketAddress;public class WebsocketUtil {public static InetSocketAddress getRemoteAddress(Session session) {if (session == null) {return null;}RemoteEndpoint.Async async = session.getAsyncRemote();//在Tomcat 8.0.x版本有效//InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#sos#socketWrApper#socket#sc#remoteAddress");//在Tomcat 8.5以上版本有效InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#socketWrapper#socket#sc#remoteAddress");return addr;}private static Object getFieldInstance(Object obj, String fieldPath) {String fields[] = fieldPath.split("#");for (String field : fields) {obj = getField(obj, obj.getClass(), field);if (obj == null) {return null;}}return obj;}private static Object getField(Object obj, Class<?> clazz, String fieldName) {for (; clazz != Object.class; clazz = clazz.getSuperclass()) {try {Field field;field = clazz.getDeclaredField(fieldName);field.setAccessible(true);return field.get(obj);} catch (Exception ignore) {}}return null;}}调用方式 @OnOpen public synchronized void onOpen(Session session) {this.userService = WsApplicationContextAware.getApplicationContext().getBean(SysUserService.class);addOnlineCount();addOnlineUser(session);InetSocketAddress remoteAddress = WebsocketUtil.getRemoteAddress(session);log.error("remoteAddress.getAddress().toString() is {}",remoteAddress.getAddress().toString()); }注意 localhost和ip连接的区别
- 测试时很多是在一台机器上进行,注意发起的wss连接地址如果是localhost或127.0.0.1将返回以下结果,请使用IPV4类型的IP地址
remoteAddress.getAddress().toString() is /0:0:0:0:0:0:0:1【WebScoket获取客户端IP地址】
推荐阅读
- httpx:一个 Python Web 客户端
- 解决L2TP 隧道客户端分流问题
- Android获取屏幕宽高的四种方式
- 搭建自己的查询IP工具-Python
- SSH客户端推荐
- requests库请求获取不到数据怎么办?不妨试试看这种妙法
- 新手入门的第2 天,怎么样才能获取收益,我来为大家讲解
- 怎么利用微信公众号被动引流获取精准客户
- 新站如何快速获取大量SEO流量?
- 百度seo公司如何借助百度资源平台获取网站早排名的权益?
