我正在测试Spring4的不同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>
与WebSocketHttpRequestHandler
不同,org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler
似乎没有"拦截器"属性。
这是春天的虫子吗?你知道有什么方法可以将HttpSessionAttributes发布到SockJS websockets吗?
编辑:2014年4月28日:
好吧,我一直在做的是通过Java配置Websockets,因为我发现它更灵活:
尝试将此代码作为Java配置的一部分:
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new Handler(), "/endpoint")
.addInterceptors(new HttpSessionHandshakeInterceptors())
.withSockJS();
}
我正在使用这段代码,它对我很有用。您需要参考spring-websocket文档来获得完整的代码。
干杯