如何结合Spring Security和js sockjs-client

我想通过sockjs-client创建一个Spring Server和一个Broswer javascript客户端连接。 应通过Spring Security确保连接。

我有以下两难困境:

  1. Spring Security似乎假设websocket握手是通过经过身份validation的http会话发生的(例如,JSESSIONID cookie设置,登录发生)。

  2. 然而,sockjs-client似乎对开发人员施加限制,即必须使用未经过身份validation的http会话(请参阅https://github.com/sockjs/sockjs-client/issues/196 ),以任何方式强制执行此操作。

我对这种困境的评价是否正确,是否有任何明显的解决方案来实现带有websockets的弹簧服务器的安全性,以便sockjs-client可以安全地连接?

如果用于创建经过身份validation的HttpSession,建议的在GET / info请求中传递任何身份validation令牌的解决方案看起来像是无法绕过SockJS安全限制。

这似乎是几个人问题的基础,例如:

  • 在使用sockjs和stomp的/ info请求期间没有cookie
  • Spring Websocket + SockJS的身份validation模型,并按用户发送消息
  • 如何从Spring 4 stomp websocket方法获取/设置主体和会话属性
  • https://stackoverflow.com/questions/33156282
  • Spring Websockets @SendToUser没有登录?
  • Spring Session Basic Auth令牌作为Spring-Websocket中的查询参数传递
  • Spring安全websocket和HTTP身份validation/授权
  • Spring Session,Websocket Security集成流程
  • Spring安全/ Spring会话/ Web套接字
  • Spring Boot,Websockets无法从Session获取用户(即java.security.Principal)
  • Spring 4 WebSockect over STOMP Authentication
  • http://sunitkatkar.blogspot.de/2014/01/spring-4-websockets-with-sockjs-stomp.html

我看到3种可选方式:

  1. 不要使用SockJs,而只使用本机Websockets
  2. 通过query-param Token在经过身份validation的Http Session上使用SockJS,并牺牲一些安全性
  3. 通过未经身份validation的http连接进行连接,并为spring-websockets实现自定义身份validation处理(可能基于spring会话)