通过MessageMapping

时间:2018-05-30 11:49:53

标签: java spring spring-boot spring-security spring-websocket

问题

我在spring上设置了一个stomp websocket,并通过@MessageMapping注释定义了端点。

我已经读过@PreAuthorize可以用于在每个映射的基础上进行授权,但这似乎不起作用。使用@PreAuthorize时,如果用户不在特定角色,则不会拒绝请求。

代码

@PreAuthorize("hasRole('ROLE_ADMIN')")
@MessageMapping(value="/addComment/{ID}")
public void addComment(@DestinationVariable Integer ID, String content, Principal principal)
        throws Exception {

//Do stuff with ID,content etc
}  

我目前的设置是这样的

@Configuration
public class WebSocketSecurityConfig extends
        AbstractSecurityWebSocketMessageBrokerConfigurer {
    protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
        messages
                .simpDestMatchers("/put/addComment/**").hasRole("ADMIN");
    }
}

虽然我更愿意对每个映射进行注释,因为它对我来说更清楚。

问题(S)

可以预先授权与映射一起使用吗? 如果是这样,有理由说它不能在上面的例子中工作吗?
如果没有,有没有办法按映射而不是在configurer中执行此操作?

附加

使用Spring 4

需要更多信息让我知道

0 个答案:

没有答案