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