2
A
回答
8
您可以在握手期间用HandshakeInterceptor
设置客户端IP的WebSocket的会话属性:
public class IpHandshakeInterceptor implements HandshakeInterceptor {
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
// Set ip attribute to WebSocket session
attributes.put("ip", request.getRemoteAddress());
return true;
}
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Exception exception) {
}
}
与握手拦截器配置您的端点:
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").addInterceptors(new IpHandshakeInterceptor()).withSockJS();
}
而且在获取属性的处理程序方法:
@MessageMapping("/destination")
public void handlerMethod(SimpMessageHeaderAccessor ha) {
String ip = (String) ha.getSessionAttributes().get("ip");
...
}
2
下面的例子更新为得到确切的远程客户端IP:
@Component
public class IpHandshakeInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
// Set ip attribute to WebSocket session
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
String ipAddress = servletRequest.getServletRequest().getHeader("X-FORWARDED-FOR");
if (ipAddress == null) {
ipAddress = servletRequest.getServletRequest().getRemoteAddr();
}
attributes.put("ip", ipAddress);
}
return true;
}
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Exception exception) {
}
}
相关问题
- 1. jetty 8 - websockets:如何获取客户端IP地址?
- 2. 如何获取客户端IP地址
- 3. 如何获取客户端IP地址
- 4. Spring从RPC编码的Webservice客户端获取IP地址
- 5. 始终从Servlet获取客户端IP地址:: 1的地址
- 6. 如何使用Node.js中的WebSocket(websockets/ws)库获取客户端IP地址?
- 7. WebClient客户端IP地址
- 8. Azure客户端IP地址
- 9. 客户端ip地址
- 10. PHP,获得客户端的IP地址
- 11. 客户端的IP地址/ MAC地址
- 12. 获取mule中的每个请求的客户端IP地址
- 13. 获取客户端IP地址和端口?
- 14. 获取C端口客户端的IP地址
- 15. 如何在php中获取客户端ip地址和端口?
- 16. WCF:在客户端,获取端点IP地址
- 17. 获取客户端IP地址:端口(System.Runtime.Remoting.Channels)
- 18. 获取客户端屏幕的用户IP地址
- 19. PHP |从客户端用户获取私有IP地址?
- 20. 如何获取客户端/用户的IP地址?
- 21. 在Sinatra获取客户的IP地址?
- 22. STOMP vs WAMP over Spring-WebSockets
- 23. 获取客户端IP的客户端
- 24. 如何在客户端自动获取客户端的IP地址c
- 25. ServerSocket +客户端套接字 - 如何获取客户端的IP地址?
- 26. 可靠地获取Web客户端IP
- 27. 获取SOAP服务客户端的IP地址
- 28. 获取客户端的IP地址在WCF与wsDualHttpBinding
- 29. 如何获取ring-clojure中的客户端IP地址?
- 30. 获取请求的客户端的IP地址(SOAP消息)
我看,这将可能从WebSocketSession获取IP地址... – Damian