代码之家  ›  专栏  ›  技术社区  ›  csharpnewbie

代码如何决定使用WebSphereRequestUpgradeStrategy和TomcatRequestUpgradeStrategy?

  •  0
  • csharpnewbie  · 技术社区  · 5 年前

    TomcatRequestUpgradeStrategy 这个不起作用,而那个用 WebSphereRequestUpgradeStrategy 很好用。我不清楚逻辑是如何决定这一点的?我已经在我的pom中设置了spring boot starter tomcat。所以我不清楚它是如何导致它使用TomcatRequestUpgradeStrategy的。有人能帮我吗?

    工作:

    SRTServletRequest31.upgrade(Class<T>) line: 157 
    WsocHandlerImpl.handleRequest(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>, boolean) line: 268 
    ServerContainerExt.doUpgrade(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 288   
    NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
    NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62  
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43  
    Method.invoke(Object, Object...) line: 498  
    WebSphereRequestUpgradeStrategy.upgradeInternal(ServerHttpRequest, ServerHttpResponse, String, List<Extension>, Endpoint) line: 87  
    WebSphereRequestUpgradeStrategy(AbstractStandardUpgradeStrategy).upgrade(ServerHttpRequest, ServerHttpResponse, String, List<WebSocketExtension>, Principal, WebSocketHandler, Map<String,Object>) line: 119    
    DefaultHandshakeHandler(AbstractHandshakeHandler).doHandshake(ServerHttpRequest, ServerHttpResponse, WebSocketHandler, Map<String,Object>) line: 281    
    WebSocketHttpRequestHandler.handleRequest(HttpServletRequest, HttpServletResponse) line: 166
    

    不工作:

    SRTServletRequest31.upgrade(Class<T>) line: 157 
    RequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399   
    HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399 
    HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399  
    UpgradeUtil.doUpgrade(WsServerContainer, HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 234   
    WsServerContainer.doUpgrade(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 265    
    TomcatRequestUpgradeStrategy.upgradeInternal(ServerHttpRequest, ServerHttpResponse, String, List<Extension>, Endpoint) line: 72 
    TomcatRequestUpgradeStrategy(AbstractStandardUpgradeStrategy).upgrade(ServerHttpRequest, ServerHttpResponse, String, List<WebSocketExtension>, Principal, WebSocketHandler, Map<String,Object>) line: 119   
    DefaultHandshakeHandler(AbstractHandshakeHandler).doHandshake(ServerHttpRequest, ServerHttpResponse, WebSocketHandler, Map<String,Object>) line: 281    
    WebSocketHttpRequestHandler.handleRequest(HttpServletRequest, HttpServletResponse) line: 166    
    

    请让我知道如果你需要更多的细节。感谢您的回复。

    0 回复  |  直到 5 年前
        1
  •  0
  •   csharpnewbie    5 年前

    我找到了问题的答案。这可能对将来的其他人有所帮助。

    DefaultHandshakeHandler org.apache.tomcat.websocket.server.WsHttpUpgradeHandler 类加载器中存在。因为pom依赖项中有tomcat嵌入websocket,所以存在这个类。所以,即使我是在自由号上跑步,这也被触发了。从pom中删除相同的内容,帮助我解决了问题。