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

  • id 一个bean标识符,用于引用上下文中其他地方的通道安全接口bean。如果指定,Spring Security要求在Spring Messaging中进行显式配置。如果未指定,Spring Security将自动与消息基础架构集成,如第41.2.1节“网络套接字-消息代理”中所述
  • same-origin-disabled 禁用踏脚标头中出现CSRF令牌的要求(默认为false)。如果有必要允许其他来源建立SockJS连接,更改默认值非常有用。

Child Elements of <websocket-message-broker>

41.2.2 <intercept-message>

为消息定义授权规则。

Parent Elements of <intercept-message>

<intercept-message> Attributes

  • pattern 在消息目标上匹配的基于蚂蚁的模式。例如,“/”匹配任何带有目的地的消息;"/admin/"匹配任何目标以"/admin/** "开头的邮件。
  • type 要匹配的消息类型。有效值在简单消息类型中定义(即连接、连接确认、心跳、消息、订阅、取消订阅、断开连接、断开确认、其他)。
  • access 用于保护消息的表达式。例如,“denyAll”将拒绝访问所有匹配的消息;“permitAll”将授予对所有匹配消息的访问权限;" hasRole('ADMIN ')要求当前用户具有匹配消息的角色' ROLE_ADMIN '。
原文地址:https://www.cnblogs.com/jrkl/p/13512392.html