【发布时间】:2017-01-24 10:39:17
【问题描述】:
我想在 stomp 标头中设置一个用户名,并在握手期间将该用户名设置在 Principal 对象中。创建了我自己的 HandshakeHandler,但我无法在从 DefaultHandshakeHandler 覆盖的方法确定用户中获取该用户名。
任何帮助将不胜感激。这是相关代码-->
这是我的客户端代码 -->
var from = document.getElementById('username').value;
var socket = new SockJS('/WebSocketsChat/chat');
stompClient = Stomp.over(socket);
stompClient.connect({userName:from,sampleMsg:"Hello"},
function(frame) {
// Some more code here
这是我的 HandShakeHandler -->
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat").setHandshakeHandler(new RandomUserNameHandshakeHandler()).withSockJS();
}
private class RandomUserNameHandshakeHandler extends DefaultHandshakeHandler{
@Override
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String,Object> attributes){
// Some Code that would give me the username set in Stomp Header
// For now i am randomly generating a username and setting in principal.
String username = "user"+"-"+ new Random().nextInt(100);
return new UsernamePasswordAuthenticationToken(username,null);
}
}
【问题讨论】: