Проблема
Я настроил веб-сокет с пружиной, и конечные точки определены с помощью аннотации @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");
}
}
Хотя я бы предпочел аннотировать каждое сопоставление, так как оно мне более понятно.
Вопрос (ы)
Можно ли использовать предварительную авторизацию с сопоставлениями?
Если так, то есть причина, по которой он не работает в приведенном выше примере?
Если нет, есть ли способ сделать это для каждого сопоставления, а не в конфигураторе?
Extra
Использование Spring 4
Если вам нужна дополнительная информация, сообщите мне