Spring Websocket с перехватчиком выполняет preSend, когда соединение закрыто - PullRequest
0 голосов
/ 25 июня 2019

Я использую Interceptor для получения заголовков авторизации, но метод presend выполняется как при установлении соединения, так и при его закрытии. Проблема в том, что когда он закрыт, заголовки выдают исключение NULL, должен ли я сначала проверять наличие NULL или есть лучший способ прервать соединение, чтобы метод preSend не выполнялся? Мой конфиг:

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry
            .addEndpoint("/api/chat/message")
            .setAllowedOrigins("*");
}
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
    registration.interceptors(getWebSocketInterceptor());
}
private WebSocketInterceptor getWebSocketInterceptor(){
    return new WebSocketInterceptor();
}

Мой WebSocketInterceptor:

public class WebSocketInterceptor implements ChannelInterceptor, HandshakeInterceptor {

    @Override
    public Message<?> preSend(Message<?> message, MessageChannel channel) {
        MessageHeaders headers = message.getHeaders();
        MultiValueMap<String, String> multiValueMap = headers.get(StompHeaderAccessor.NATIVE_HEADERS,MultiValueMap.class);
            for(Map.Entry<String, List<String>> head : multiValueMap.entrySet()) {
            System.out.println(head.getKey());
            if(head.getKey().equals("Authorization")){
                System.out.println(head.getValue());
            }
        }
        return message;
    }

1 Ответ

0 голосов
/ 25 июня 2019

Я нашел, как я могу проверить тип соединения в preSend, а также просто взять заголовки из StompHeaderAccessor:

StompHeaderAccessor accessor =
        MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);

if (StompCommand.CONNECT.equals(accessor.getCommand())) {
    List<String> authorization1 = accessor.getNativeHeader("Authorization");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...