【问题标题】:Stomp java client auth headers are not send不发送 Stomp Java 客户端身份验证标头
【发布时间】: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


    【解决方案1】:

    您在这里混淆了参数的顺序:“stompClient.connect(URL, sessionHandler,headers);”标头应该在处理程序之前。

    这是来自春天的来源: 公共 ListenableFuture 连接(字符串 url,@Nullable WebSocketHttpHeaders 握手标头, @Nullable StompHeaders connectHeaders、StompSessionHandler 处理程序、对象... uriVariables)

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      相关资源
      最近更新 更多