验证authToken

时间:2018-11-14 17:08:49

标签: java spring-security websocket

有一个websocket-在Java Spring中,请参见Cookie中的authToken,如何验证此authToken?我知道此authToken是从http层传递到websocket的,所以我试图验证websocket是由我们的应用程序打开的,而不是由其他来源打开的。

Headers for Websocket:  
GET ws://localhost:9999/somePath/websocket HTTP/1.1  
Host: localhost:9999  
Connection: Upgrade  
Pragma: no-cache  
Cache-Control: no-cache  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36  
Upgrade: websocket  
Origin: http://localhost  
Sec-WebSocket-Version: 13  
Accept-Encoding: gzip, deflate, br  
Accept-Language: en-US,en;q=0.9  
Cookie: authToken=elFKMk5TckR0ZUNvdnZySUJxc2ZMdz09OklEZENrRFRySkp0U0ltVFdKU1RIZVE9PQ  
Sec-WebSocket-Key: e//VDAjHSRjE810tCbIEyw==  
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits  
Sec-WebSocket-Protocol: v10.stomp, v11.stomp, v12.stomp  

我想验证HttpHandshakeInterceptor.beforeHandshake中的authToken

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer
registry.addEndpoint(stompEndPoint).addInterceptors(new HttpHandshakeInterceptor()).setAllowedOrigins("*").withSockJS();

public class HttpHandshakeInterceptor implements HandshakeInterceptor
Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception {

    if (request instanceof ServletServerHttpRequest) {
        ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
        HttpSession session = servletRequest.getServletRequest().getSession();
        attributes.put("sessionId", session.getId());
        // validate token logic

    }
    return true;
}

0 个答案:

没有答案