问题
我在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
所需的更多信息让我知道