从WebSocket端点我尝试调用Singleton Service。 但我无法使用WebSocket的Request或Session范围。
(@ Scope(value =“request”,proxyMode = ScopedProxyMode.TARGET_CLASS))
我得到范围'请求'对当前线程无效; 对于任何'ScopedProxyMode'的'request'或'session'范围。
感谢您的帮助!
答案 0 :(得分:1)
对于Web套接字,没有请求/响应,因此请求范围无效。他们在Spring 4.1中引入了名为websocket的新范围。 @Scope(name =" websocket",proxyMode = ScopedProxyMode.TARGET_CLASS)。示例参考链接
答案 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