Spring Websocket允许客户端(即浏览器)直接向任何代理支持的目的地发送消息,即。允许直接客户端到客户端通信绕过服务器端应用程序。在现实世界中,我认为将写访问权直接公开给您的消息代理是不可接受的。出于安全性和消息完整性的原因,您通常只希望允许服务器应用程序通过代理向客户端发送任何消息。但我找不到任何有关如何实现这一目标的信息。默认行为是浏览器对代理目的地具有不受限制的读写直接访问权限。
答案 0 :(得分:2)
这在技术上并非如此,客户端和代理之间没有直接通信,所有消息都通过您的应用程序,无论目标类型如何。经纪人目的地消息被转发给经纪人,这意味着您可以在他们到达经纪人之前随时拦截他们。 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");
}
}
在上面的代码段中,拒绝向任何/topic
目的地发送邮件,而对其他目的地的任何其他操作都需要角色ADMIN。如果这还不够,您可以随时实施自己的ChannelInterceptor
拦截邮件并将其添加到clientInboundChannel
。