赞
踩
因为 websocket 的连接只有 session,所以需要借助 tomcat 来获取远程的客户端 IP。程序如下所示:
package com.maxvision.maxects.util; import javax.websocket.RemoteEndpoint; import javax.websocket.Session; import java.lang.reflect.Field; import java.net.InetSocketAddress; public class WebsocketUtil { /* * 通过 websocket 的 session 来获取远程客户端的 IP */ public static InetSocketAddress getRemoteAddress(Session session) { if (session == null) { return null; } RemoteEndpoint.Async async = session.getAsyncRemote(); 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 e) { } } return null; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。