Spring Websocket中的请求或会话范围

时间:2015-08-10 10:03:18

标签: spring scope spring-websocket

从WebSocket端点我尝试调用Singleton Service。 但我无法使用WebSocket的Request或Session范围。

(@ Scope(value =“request”,proxyMode = ScopedProxyMode.TARGET_CLASS))

我得到范围'请求'对当前线程无效; 对于任何'ScopedProxyMode'的'request'或'session'范围。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

对于Web套接字,没有请求/响应,因此请求范围无效。他们在Spring 4.1中引入了名为websocket的新范围。 @Scope(name =" websocket",proxyMode = ScopedProxyMode.TARGET_CLASS)。示例参考链接

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#websocket-stomp-websocket-scope

答案 1 :(得分:0)

我不确定Spring,但如果您将Web套接字代码构建为JSR-356标准(Spring应该理解),您可以在端点定义中添加自定义配置程序,以便拦截握手。请参阅javax.websocket.server.ServerEndpointConfig.Configurator.modifyHandshake(ServerEndpointConfig, HandshakeRequest, HandshakeResponse),然后您可以了解实际的会话对象,但这取决于您的应用程序服务器。你绝对可以得到任何参数和标题。

这是最直接的答案,但更好的设计方法是首先消除对会话的依赖。

答案 2 :(得分:0)

您可以使用

@Scope(name = "websocket", proxyMode = ScopedProxyMode.TARGET_CLASS)

但这也是单例,不是会话范围。 https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/websocket.html