我正在测试Spring 4的不同WebSocket方法。
最基本的,运行良好,调用拦截器(我想发布HttpSession属性):
<websocket:handlers>
<websocket:mapping path="/simpleChatHandler" handler="simpleChatHandler"/>
<websocket:handshake-interceptors>
<bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor"/>
</websocket:handshake-interceptors>
</websocket:handlers>
这是在org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest()
:
[...]
try {
Map<String, Object> attributes = new HashMap<String, Object>();
if (!chain.applyBeforeHandshake(request, response, attributes)) {
但是当我使用SockJS处理程序时,永远不会调用拦截器:
<websocket:handlers>
<websocket:mapping path="/simpleChatHandlerSockJS" handler="simpleChatHandler"/>
<websocket:handshake-interceptors>
<bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor"/>
</websocket:handshake-interceptors>
<websocket:sockjs/>
</websocket:handlers>
与org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler
不同,WebSocketHttpRequestHandler
似乎没有“拦截器”属性。
这是一个Spring bug吗?你知道如何将HttpSessionAttributes发布到SockJS websockets吗?
答案 0 :(得分:2)
编辑:2014年4月28日:
好的,我一直在做的是通过Java配置Websockets,因为我发现它更灵活:
尝试将此代码作为Java配置的一部分:
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new Handler(), "/endpoint")
.addInterceptors(new HttpSessionHandshakeInterceptors())
.withSockJS();
}
我正在使用此代码,它正在为我工作。您需要参考spring-websocket文档以获取完整的代码。
干杯