Spring4WebSockets+SockJS-websocket:从未调用过握手拦截器



我正在测试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文档来获得完整的代码。

干杯

相关内容

  • 没有找到相关文章

最新更新