如何使用SockJs验证Spring非Web Websocket上的STOMP Java客户端?

3
如何使用SockJs验证Spring非Web Websocket上的STOMP Java客户端?
基于会话的身份验证?基于令牌的身份验证?
文档中提到:
现有的Web应用程序已经使用基于HTTP的身份验证。例如
Spring Security可以像往常一样保护应用程序的HTTP URL。 由于WebSocket会话始于HTTP握手,这意味着映射到STOMP / WebSocket的URL已经自动受到保护并需要进行身份验证。 此外,打开WebSocket连接的页面本身很可能受到保护,因此在实际握手时,用户应该已经过身份验证。

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#websocket-stomp-authentication

实际上,我在未经过身份验证的情况下连接并发送消息。我的Java服务器应用程序使用Spring框架,但我的客户端是Java客户端,而不是Web客户端。
1个回答

3

官方文档说:

String url = "ws://127.0.0.1:8080/endpoint";
StompSessionHandler sessionHandler = new MyStompSessionHandler();
stompClient.connect(url, sessionHandler);

但是还有一种带有额外参数WebSocketHttpHeaders的连接方法。我用它进行基本授权:

WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
String auth = "user" + ":" + "password";
headers.add("Authorization", "Basic " + new String(Base64.getEncoder().encode(auth.getBytes())));
stompClient.connect(url, headers, new MyStompSessionHandler());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接