此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

认证

每个 STOMP over WebSocket 消息传递会话都以 HTTP 请求开始。 这可以是升级到 WebSockets 的请求(即 WebSocket 握手) 或者,在 SockJS 回退的情况下,是一系列 SockJS HTTP 传输请求。spring-doc.cadn.net.cn

许多 Web 应用程序已经具有身份验证和授权功能,以 安全的 HTTP 请求。通常,用户通过 Spring Security 进行身份验证 通过使用某种机制,例如登录页面、HTTP 基本身份验证或其他方式。 经过身份验证的用户的安全上下文保存在 HTTP 会话中 并与同一基于 cookie 的会话中的后续请求相关联。spring-doc.cadn.net.cn

因此,对于 WebSocket 握手或 SockJS HTTP 传输请求, 通常,已经有一个经过身份验证的用户可以通过HttpServletRequest#getUserPrincipal().Spring 会自动关联该用户 为它们创建 WebSocket 或 SockJS 会话,随后,使用 通过用户标头通过该会话传输的 STOMP 消息。spring-doc.cadn.net.cn

简而言之,典型的 Web 应用程序不需要执行任何作 超出了它已经为安全所做的工作。用户在 HTTP 请求级别,其安全上下文通过基于 cookie 的 HTTP 会话(然后与创建的 WebSocket 或 SockJS 会话相关联 )并导致在每个Message流动 通过应用程序。spring-doc.cadn.net.cn

STOMP 协议确实有loginpasscode标头CONNECT框架。 这些最初是为 STOMP over TCP 设计的,也是 STOMP 所必需的。但是,对于 STOMP 通过 WebSocket,默认情况下,Spring 忽略 STOMP 协议的身份验证标头 级别,并假定用户已在 HTTP 传输级别进行身份验证。 预期 WebSocket 或 SockJS 会话包含经过身份验证的用户。spring-doc.cadn.net.cn