She*_*epy 1 spring websocket spring-websocket
Spring Websocket 允许客户端(即浏览器)直接将消息发送到任何代理支持的目的地,即允许绕过服务器端应用程序进行直接的客户端到客户端通信。在现实世界中,我认为直接向消息代理公开公开写入访问权限是不可接受的。出于安全和消息完整性的原因,您通常希望只允许服务器应用程序通过代理向客户端发送任何消息。但我找不到任何有关如何实现这一目标的信息。默认行为是浏览器对代理目标具有不受限制的读+写直接访问权限。
这在技术上是不正确的,客户端和代理之间没有直接通信,所有消息都会通过您的应用程序,无论目标类型如何。代理目标消息被转发到代理,这意味着您可以在它们到达代理之前随时拦截它们。Spring Security 4.0.0.RC1 支持 WebSocket 安全性,因此您可以对消息应用授权:
public class WebSocketSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages
.antMatchers(SimpMessageType.MESSAGE, "/topic/**").denyAll()
.antMatchers("/**").hasRole("ADMIN");
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,向任何/topic目标发送消息都会被拒绝,并且向其他目标执行任何其他操作都需要 ADMIN 角色。如果这对您来说还不够,您可以随时实现自己的ChannelInterceptor拦截消息并将其添加到clientInboundChannel.
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |