首页 > 解决方案 > 会话的用户与请求的用户不匹配

问题描述

我正在尝试从一个工作示例中复制,但是,我的 Websocket 几乎可以连接,但由于“会话的用户与请求的用户不匹配”而失败。主题中的错误在 Spring Boot 方面;客户端是 Angular 上的 SockJS/StompJS。

这些是每个网络选项卡的调用,我猜是在连接被提升为真正的 websocket 之前:

200 GET https://localhost:8081/rules/ws/info?t=1628570085372
200 POST https://localhost:8081/rules/ws/943/b2fcvaup/xhr_streaming?t=1628570087697
404 POST https://localhost:8081/rules/ws/943/b2fcvaup/xhr_send?t=1628570087959

Spring Boot 日志片段

    2021-08-10 00:34:47 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - @@@ JwtTokenFilter on URL: https://localhost:8081/ws/943/b2fcvaup/xhr_streaming
    2021-08-10 00:34:47 DEBUG o.s.web.servlet.DispatcherServlet - POST "/ws/943/b2fcvaup/xhr_streaming?t=1628570087697", parameters={masked}
    2021-08-10 00:34:47 DEBUG o.s.w.s.s.s.WebSocketHandlerMapping - Mapped to org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler@98be09f
    2021-08-10 00:34:47 DEBUG o.s.w.s.s.t.h.DefaultSockJsService - Processing transport request: POST https://localhost:8081/ws/943/b2fcvaup/xhr_streaming?t=1628570087697
    2021-08-10 00:34:47 DEBUG o.s.w.s.s.t.h.XhrStreamingTransportHandler - POST https://localhost:8081/ws/943/b2fcvaup/xhr_streaming?t=1628570087697
    2021-08-10 00:34:47 DEBUG o.s.w.s.h.LoggingWebSocketHandlerDecorator - New XhrStreamingSockJsSession[id=b2fcvaup]
    2021-08-10 00:34:47 DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - @@@ JwtTokenFilter on URL: https://localhost:8081/ws/943/b2fcvaup/xhr_send
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter doFilter()
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send sec-fetch-site:same-origin
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send sec-fetch-mode:cors
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send sec-fetch-dest:empty
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send cookie:_dvp=0:knao8n9x:ueQI~8QHCJCZqEz1PKsFuAFqAuwmUdWO; connect.sid=s%3A0PybWcqMScr8PgBCu5QDqv0FWUofy-Ob.eo2YAp2e6X%2Bf%2BrQHyHDs%2Bq74QyN9qPXUX8x%2BleqM1YE; 368b7883bb173c2e7ce35c0973392d07=0816943ee1359cee78b63cb442c24aaa; _dvs=0:ks5eeyuv:7~D3dEqFIdI39xqBbkQWOEPio4PT0S3q
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send referer:https://localhost:8081/sprint-cost-recovery/softlayer-process
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send connection:keep-alive
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send origin:https://localhost:8081
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send content-length:69
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send content-type:text/plain
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send accept-encoding:gzip, deflate, br
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send accept-language:en-US,en;q=0.5
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send accept:*/*
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send host:localhost:8081
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - SimpleCorsFilter.doFilter https://localhost:8081/ws/943/b2fcvaup/xhr_send authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzcHJpbnQtbWlkZGxld2FyZS1pc3N1ZXIiLCJzdWIiOiJCZW4uUHJhY2h0MUBpYm0uY29tIiwibm90ZXNJZCI6IkJlbiBQcmFjaHQiLCJzZXJpYWxOdW0iOiI4Njc1NTU4OTciLCJleHAiOjE2Mjg1NzcyNjcsImJsdWVHcm91cHMiOlsiQkxVRUNPU1RfU1BSRUFEU0hFRVRfVVBMT0FEX1RFU1QiXSwiaWF0IjoxNjI4NTcwMDg3fQ.FwfnshljmQscqnu8T3o2AS29cDgzpRWa7T62ZKmAUMQ
    2021-08-10 00:34:48 INFO  c.i.c.s.c.r.s.jwt.JwtTokenFilter - @@@ JwtTokenFilter on URL: https://localhost:8081/ws/943/b2fcvaup/xhr_send
    2021-08-10 00:34:48 DEBUG o.s.web.servlet.DispatcherServlet - POST "/ws/943/b2fcvaup/xhr_send?t=1628570087959", parameters={masked}
    2021-08-10 00:34:48 DEBUG o.s.w.s.s.s.WebSocketHandlerMapping - Mapped to org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler@98be09f
    2021-08-10 00:34:48 DEBUG o.s.w.s.s.t.h.DefaultSockJsService - Processing transport request: POST https://localhost:8081/ws/943/b2fcvaup/xhr_send?t=1628570087959
    2021-08-10 00:34:48 DEBUG o.s.w.s.s.t.h.DefaultSockJsService - The user for the session does not match the user for the request.
    2021-08-10 00:34:48 DEBUG o.s.web.servlet.DispatcherServlet - Completed 404 NOT_FOUND

进行 SockJS 调用的 Angular 代码片段:

            const socket = new SockJS('https://localhost:8081/rules/ws');
            var costFileClient = Stomp.over(socket);
            if(costFileClient!=null) {
                console.log('@@@ costFileClient not null');
            } else {
                console.log('@@@ costFileClient is null');
            }
            console.log('Before webService connect');
            var success_function = function(message) {
                console.log('Success '+message);
            }; 

            var error_function = function(message) {
                console.log('Error '+message);
            }; 

            costFileClient.connect({},success_function,error_function);
            costFileClient.disconnect();

            /* Connect Error Callback*/
            console.log('After webService connect');

WebSocketConfig.java

@Configuration
@EnableWebSocket
@Controller
@EnableWebSocketMessageBroker
public class WebSocketConfig 
        implements WebSocketConfigurer, WebSocketMessageBrokerConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(WebSocketConfig.class);

    @Autowired
    CostFileUploadWebSocketHandler costFileUploadWebSocketHandler;

    /*
    @Override
    protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
        messages.anyMessage().authenticated();
    }

    @Override
    protected boolean sameOriginDisabled() {
        return true;
    }
    */

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        logger.info("In registerWebSocketHandlers");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        logger.info("In registerStompEndpoints");
        registry
        .addEndpoint("/ws")
        .setAllowedOrigins("https://localhost:8448","https://localhost:8081") /* Removed * */
        .withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        logger.info("In configureMessageBroker");
        config.enableSimpleBroker("/topic/");
    }

}

WebSocketController.java

@Controller
public class WebSocketController {

    private static final Logger logger = LoggerFactory.getLogger(WebSocketController.class);

    @Autowired
    private SimpMessageSendingOperations messagingTemplate;

    @MessageMapping("/bluecost/ws")
    @SendTo("/topic/softlayer-cost-file")
    public String processMessageFromClient(@Payload String message) throws Exception {
        logger.info("Reached WebSocketController.processMessageFromClient()");
        ObjectMapper mapper = new ObjectMapper();
        String name = mapper.readValue(message,Map.class).get("name").toString();
        return name;
    }
    
    @MessageExceptionHandler
    public String handleException(Throwable exception) {
        logger.info("Reached WebSocketController.handleException()");
        messagingTemplate.convertAndSend("/errors", exception.getMessage());
        return exception.getMessage();
    }

}

标签: spring-bootwebsocketstompsockjs

解决方案


推荐阅读