【发布时间】:2022-10-22 08:12:52
【问题描述】:
当我尝试通过 stomp java fx 客户端发送身份验证标头时,它们不会传递到 Spring Boot 后端。
客户:
String URL = 'wss://myurl.de/wsconnection'
WebSocketClient client = new StandartWebSocketClient(client);
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
StompSessionHandler sessionHandler = new MyStompSessionHandler();
StompHeaders headers = new Headers();
headers.set("Authorization", "Bearer myToken")
headers.setLogin("Bearer myToken")
stompClient.connect(URL, sessionHandler,headers);
我尝试了两种方法:使用登录头方法和自定义授权头。因此,在后端,我尝试通过这两个标头之一获取 jwt。不幸的是,jwt 值始终为 null,因此未通过。
后端:
@Configuration
public class WebSocketSecurityConf extends AbstractSecurityWebSocketMessageBrokerConfigurer {
@Override
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages.anyMessage().permitAll();
}
@Override
protected boolean sameOriginDisabled() {
return true;
}
}
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureClientInboundChannel(ChannelRegistration registration) {
registration.setInterceptors(new ChannelInterceptorAdapter() {
@Override
public Message<?> preSend(Message<?> message, MessageChannel channel) {
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
if (StompCommand.CONNECT.equals(accessor.getCommand())) {
String jwtToken;
jwtToken = accessor.getFirstNativeHeader("Authorization");
if(jwtToken == null){
jwtToken = accessor.getFirstNativeHeader("login");
}
System.out.println("webSocket token is "+ jwtToken);
System.out.println("accessor header "+ accessor.getMessageHeaders());
这里有什么想法吗?
【问题讨论】:
标签: spring-boot javafx spring-security spring-websocket stomp