问题

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

我已经读过 @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");
    }
}

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


问题

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


额外

使用Spring 4

所需的更多信息让我知道