【发布时间】:2017-05-09 01:12:43
【问题描述】:
在原始 Spring WebSocket 应用程序(不使用 sockjs/STOMP 或任何其他中间件)中,如何让 Spring 注入已在 HTTP 会话范围内注册的 bean,以便它们可以被我的 WebSocketHandler 中的代码使用豆子?
请注意,我不是要问的是以下任何一个问题:
- 如何在同一 WebSocket 会话的所有处理程序调用都可以访问的范围内创建 bean(例如,如Request or Session scope in Spring Websocket 的答案中所述)。我需要访问的 bean 已经存在于 HTTP 会话的范围内
- 我如何(以编程方式)访问 servlet 容器的 HTTP 会话存储中的对象(我没有尝试这样做,但我很确定答案涉及使用 HttpSessionHandshakeInterceptor),但这并没有我注入 Spring 范围的依赖项。
- 如何使用 ScopedProxy 在不同范围内的代码之间传递 bean(例如,如 here 所述);我已经熟悉如何执行此操作,但尝试为
WebSocketHandler执行此操作会导致错误,因为在访问对象时,session范围尚未绑定到线程。 - How to access the current security principal -- 再次强调,非常有用,但不是我目前想要达到的目标。
我希望做的是提供一个简单的框架,允许 MVC 应用程序的传统 HTTP 请求启动部分直接与 WebSocket 协议通信(用于向客户端发送简单的推送更新)。我想要做的是将数据从 MVC 控制器推送到会话范围的对象中,然后在 websocket 处理程序中将其拉出。 从 MVC 控制器的角度,我想要最简单的 API,如果可以只使用会话范围的 bean,那将是理想的。如果您对共享这些数据的非常简单的方法有任何其他想法,我也想听听这些想法,以防这种方法不可行。
【问题讨论】:
标签: spring-mvc websocket