gpt4 book ai didi

java - 带有拦截器的 Spring Websocket 在连接关闭时执行 preSend

转载 作者:行者123 更新时间:2023-12-02 03:54:36 26 4
gpt4 key购买 nike

我正在使用拦截器来获取授权 header ,但在建立连接和关闭连接时都会执行 presend 方法。问题是,当它关闭时, header 会抛出 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();
}

我的WebSocket拦截器:

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;
}

最佳答案

我发现如何检查 preSend 中的连接类型,并且只从 StompHeaderAccessor 中获取 header :

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

if (StompCommand.CONNECT.equals(accessor.getCommand())) {
List<String> authorization1 = accessor.getNativeHeader("Authorization");
}

关于java - 带有拦截器的 Spring Websocket 在连接关闭时执行 preSend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56757856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com