|
此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Security 7.0.4! |
WebSocket 安全
Spring Security 4.0+ 提供了授权消息的支持。 其中一个具体的例子是,在基于WebSocket的应用程序中提供授权功能。
<websocket-message-broker>
`websocket-message-broker` 元素有两种不同的模式。 如果没有指定 `websocket-message-broker@id`,那么它将执行以下操作:
-
确保任何SimpAnnotationMethodMessageHandler都注册了自定义参数解析器AuthenticationPrincipalArgumentResolver。 这使得可以使用
@AuthenticationPrincipal来解析当前Authentication的主体。 -
确保自动为clientInboundChannel注册SecurityContextChannelInterceptor。 这会将Message中找到的用户填充到SecurityContextHolder中。
-
确保将 ChannelSecurityInterceptor 注册到 clientInboundChannel。 这允许为消息指定授权规则。
-
确保将CsrfChannelInterceptor注册到clientInboundChannel中。 这确保了只有来自原始域名的请求被启用。
-
确保将CsrfTokenHandshakeInterceptor注册到WebSocketHttpRequestHandler、TransportHandlingSockJsService或DefaultSockJsService中。 这确保了从HttpServletRequest中预期的CsrfToken被复制到WebSocket会话属性中。
如果需要额外的控制,可以指定id,并为该id分配一个ChannelSecurityInterceptor。 然后可以通过Spring的消息基础设施手动进行所有配置连接。 这种方法较为繁琐,但提供了更大的配置控制。
<websocket-message-broker> 属性
-
id 贝an标识符,用于在上下文中其他地方引用ChannelSecurityInterceptor bean。 如果指定了此标识符,Spring Security 将需要在 Spring Messaging 内进行显式配置。 如果没有指定,则 Spring Security 将自动与消息基础设施集成,具体请参阅 <websocket-message-broker>。
-
same-origin-disabled 禁用在Stomp头部需要存在CSRFTokens的要求(默认为false)。 更改默认设置可以在必要时允许其他来源建立SockJS连接。
-
security-context-holder-strategy-ref 使用此
SecurityContextHolderStrategy(注意仅在与AuthorizationManagerAPI 一起使用时有效)
<intercept-message>
定义一条授权规则用于消息。
<intercept-message> 属性
-
模式 基于ant的模式,用于匹配Message的目的地。例如,“/”将匹配任何目的地的消息;“/admin/”将匹配任何以“/admin/**”开头的目的地的消息。
-
type 匹配的消息类型。 有效的值定义在SimpMessageType中(即CONNECT、CONNECT_ACK、HEARTBEAT、MESSAGE、SUBSCRIBE、UNSUBSCRIBE、DISCONNECT、DISCONNECT_ACK、OTHER)。
-
访问 用于安全保护消息的表达式。 例如,"denyAll" 将拒绝所有匹配的消息访问;"permitAll" 将授予所有匹配消息的访问权限;"hasRole('ADMIN')" 要求当前用户具有 'ROLE_ADMIN' 角色才能访问匹配的消息。