Аутентифицировать весенний веб-сокет с помощью MessageMapping - PullRequest
0 голосов
/ 30 мая 2018

Проблема

Я настроил веб-сокет с пружиной, и конечные точки определены с помощью аннотации @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

Если вам нужна дополнительная информация, сообщите мне

...