此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
认证
每个 STOMP over WebSocket 消息传递会话都以 HTTP 请求开始。 这可以是升级到 WebSockets 的请求(即 WebSocket 握手) 或者,在 SockJS 回退的情况下,是一系列 SockJS HTTP 传输请求。
许多 Web 应用程序已经具有身份验证和授权功能,以 安全的 HTTP 请求。通常,用户通过 Spring Security 进行身份验证 通过使用某种机制,例如登录页面、HTTP 基本身份验证或其他方式。 经过身份验证的用户的安全上下文保存在 HTTP 会话中 并与同一基于 cookie 的会话中的后续请求相关联。
因此,对于 WebSocket 握手或 SockJS HTTP 传输请求,
通常,已经有一个经过身份验证的用户可以通过HttpServletRequest#getUserPrincipal()
.Spring 会自动关联该用户
为它们创建 WebSocket 或 SockJS 会话,随后,使用
通过用户标头通过该会话传输的 STOMP 消息。
简而言之,典型的 Web 应用程序不需要执行任何作
超出了它已经为安全所做的工作。用户在
HTTP 请求级别,其安全上下文通过基于 cookie 的
HTTP 会话(然后与创建的 WebSocket 或 SockJS 会话相关联
)并导致在每个Message
流动
通过应用程序。
STOMP 协议确实有login
和passcode
标头CONNECT
框架。
这些最初是为 STOMP over TCP 设计的,也是 STOMP 所必需的。但是,对于 STOMP
通过 WebSocket,默认情况下,Spring 忽略 STOMP 协议的身份验证标头
级别,并假定用户已在 HTTP 传输级别进行身份验证。
预期 WebSocket 或 SockJS 会话包含经过身份验证的用户。