对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-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 协议确实具有loginpasscodeheaders 的CONNECT框架。 这些最初是为 TCP 上的 STOMP 设计的,并且是 STOMP 所必需的。但是,对于 STOMP 默认情况下,Spring 会忽略 STOMP 协议的身份验证标头 级别,并假定用户已在 HTTP 传输级别进行身份验证。 预期是 WebSocket 或 Sockjs 会话包含经过身份验证的用户。spring-doc.cadn.net.cn