Мне нужно ответить заголовком Content-Lenght на запрос на обновление моих клиентов websocket. Как мне это сделать? Это моя попытка использовать пользовательский HandshakeInterceptor:
import java.util.Map;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.HandshakeFailureException;
import org.springframework.web.socket.server.HandshakeHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
@Configuration
@EnableWebSocket
public class SpringWebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new SocketHandler(), "/ws").setAllowedOrigins("*").addInterceptors(new HandshakeInterceptor() {
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
response.getHeaders().setContentLength(0);
return true;
}
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Exception exception) {
}
});
}
}
Но это не работает. Я могу установить любой заголовок, и он работает:
response.getHeaders (). Add ("TEST", "TEST");
Но я не вижу Content-Length. Я пробовал также пользовательские настройки заголовка вместо setContentLength()
:
response.getHeaders().add("Content-Length","0");
Но клиент не видит этот заголовок.