使用spring security

时间:2015-06-17 16:48:38

标签: spring-security websocket spring-boot stomp spring-websocket

我正在开发一个Spring引导应用程序,它使用实现RPC模式的websocket进行STOMP消息传递,该模式暴露公共(即:无需经过身份验证)和私有方法。

存在两种公共方法来注册和验证用户,因此我需要手动(以编程方式)处理用户登录,通过自定义@MessageMapping操作访问的方法。

问题是:如何验证websocket会话的用户?

要使用普通的MVC Web应用程序进行类似的操作,我会使用类似于此的代码:

@MessageMapping("/auth")
public Object auth() {
  List<GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("ROLE_TEST");
  SecurityContextHolder.getContext().setAuthentication(new PreAuthenticatedAuthenticationToken(myname, "dummy", authorities));
}

但这似乎在websocket环境中不起作用,因为当用户使用这样的方法时:

@MessageMapping("/myendpoint")
public Object myEndpoint(Param params, Principal principal) {...}

我收到错误:

org.springframework.messaging.simp.annotation.support.MissingSessionUserException: No "user" header in message

所以问题是:如何在auth()方法中手动验证用户,以便在myEndpoint()中正确解析Principal参数?

0 个答案:

没有答案