如何在Spring 4 STOMP over WebSocket配置中回复未经身份验证的用户?

Ant*_*eev 4 spring stomp websocket spring-messaging spring-websocket

我正在试验Spring 4 WebSocket STOMP应用程序.有没有办法在每个用户都有唯一会话ID的情况下回复单个未经身份验证的用户?现在我只能广播消息或直接发送给经过身份验证的用户.

@Controller
public class ProductController {

    @MessageMapping("/products/{id}")
    @SendTo("/topic") // This line makes return value to be broadcasted to every connected user.
    public String getProduct(@DestinationVariable int id) {
        return "Product " + id;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ros*_*hev 8

您可以为传入用户分配匿名身份.有两种方法可以做到这一点.

一,您可以配置DefaultHandshakeHandler该覆盖的子类,determineUser并为每个WebSocketSession分配某种身份.这需要4.0.1顺便提供(目前正在构建快照),将于2014年1月23日星期一发布.

第二,WebSocket会话将HttpServletRequest.getUserPrincipal依赖于握手HTTP请求返回的值.你可以有一个servlet Filter包装HttpServletRequest并决定从该方法返回什么.或者,如果您正在使用具有AnonymousAuthenticationFilter的Spring Security,请覆盖其createAuthentication方法.

  • 谢谢,第一个选项成功了.一个问题.当我执行`@SendToUser("/ prodcuts")时,它总是将唯一的用户标识符附加到路径:`/ user/products-user0`,`/ user/products-user1`等等.虽然我在为匿名用户创建Principal时使用UUID作为名称.有没有办法覆盖这种行为?允许Web服务器只增加此ID是否真的安全? (2认同)