41.2WebSocket Security网络套接字安全
Spring Security 4.0+提供了对消息授权的支持。一个有用的具体例子是在基于WebSocket的应用程序中提供授权。
41.2.1 <websocket-message-broker>
websocket-message-broker元素有两种不同的模式。如果未指定websocket-message-broker@id,则它将执行以下操作:
- 请确保任何简单注释方法消息处理程序SimpAnnotationMethodMessageHandler 都将验证原则警报解决程序AuthenticationPrincipalArgumentResolver 注册为自定义参数解决程序。这允许使用@AuthenticationPrincipal来解析当前身份验证的主体
- 确保安全上下文通道接口SecurityContextChannelInterceptor 为客户端clientInboundChannel自动注册。这将使用在消息中找到的用户填充安全上下文持有者SecurityContextHolder
- 确保通道安全接口ChannelSecurityInterceptor 已在客户端通道中注册。这允许为消息指定授权规则。
- 确保CsrfChannelInterceptor已在客户端通道中注册。这可确保仅启用来自原始域的请求。
- 确保向WebSocketHttpRequestHandler、TransportHandlingSockJsService或DefaultSockJsService注册了CsrfTokenHandshakeInterceptor。这确保了来自HttpServletRequest的预期CsrfToken被复制到WebSocket会话属性中。
如果需要额外的控制,可以指定id,并且将为指定的id分配一个通道安全接口。所有与Spring消息传递基础设施的连接都可以手动完成。这更麻烦,但是提供了对配置的更大控制。
<websocket-message-broker> Attributes
41.2.2 <intercept-message>
为消息定义授权规则。
- pattern 在消息目标上匹配的基于蚂蚁的模式。例如,“/”匹配任何带有目的地的消息;"/admin/"匹配任何目标以"/admin/** "开头的邮件。
- access 用于保护消息的表达式。例如,“denyAll”将拒绝访问所有匹配的消息;“permitAll”将授予对所有匹配消息的访问权限;" hasRole('ADMIN ')要求当前用户具有匹配消息的角色' ROLE_ADMIN '。