Spring 4 websocket + Tomcat 7.54 async-supported not working

后端 未结 6 633
名媛妹妹
名媛妹妹 2020-12-19 13:04

I am creating a sample chat application using the Spring websockets and stomp.js , I am using the tomcat 7.54 but while runing the application I am gettting a async-support

相关标签:
6条回答
  • 2020-12-19 13:51

    Try upgrade you jdk and tomcat version. I encountered this problem also, I upgrade jdk from 1.7 to 1.8, upgrade tomcat form 7.0.54 to 7.0.75, and resolved this problem.

    0 讨论(0)
  • 2020-12-19 13:53

    Make sure no other injected component disables async support.


    DETAILS

    I learned that Spring comes with asynchronous support by default.

    And (remotely related) sync logging configuration may disable async handling for entire service.

    Specifically, my logback integration was missing IMPORTANT line:

    public EmbeddedServletContainerCustomizer containerCustomizer(
        final String logbackAccessClasspathConfig
    ) {
        return container -> {
            if (container instanceof TomcatEmbeddedServletContainerFactory) {
                ((TomcatEmbeddedServletContainerFactory) container)
                    .addContextCustomizers(context -> {
                        LogbackValve logbackValve = new LogbackValve();
                        logbackValve.setFilename(logbackAccessClasspathConfig);
    
                        // IMPORTANT:
                        logbackValve.setAsyncSupported(true);
    
                        context.getPipeline().addValve(logbackValve);
                    }
                );
            }
        };
    }
    

    Thanks to other answer:

    • LogbackValve is configured for synchronous processing by default
    • disable the bean that was injecting LogbackAccess
    • set the asyncSupported="true" attribute where you configure the valve
    0 讨论(0)
  • 2020-12-19 13:57

    I was having the same issue with SpringBoot app and for me, it started working

    1) after adding asyncSupported to the filter like @WebFilter(urlPatterns="/api-acess/*",asyncSupported = true )

    2) added sameOrigin() support to WebSecurityConfigurerAdapter extended class like http.headers().frameOptions().sameOrigin();

    I hope it will help someone else.

    0 讨论(0)
  • 2020-12-19 13:59

    I guess you don't show entire web.xml.

    <async-supported>true</async-supported> should be configured for <filter>, too.

    UPDATE

    Well, your issue is very simple:

    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
    

    You really should map for all requests, not only the root.

    0 讨论(0)
  • 2020-12-19 14:00

    The <async-supported>true</async-supported> should be included in both the servlet and filter tags. Use the following snippet as reference:

    <web-app ...>
        ...
        <servlet>
            <servlet-name>instantaction</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                    classpath:META-INF/spring/web/my-servlet-config.xml
                </param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
            <async-supported>true</async-supported>
        </servlet>
    
        <servlet-mapping>
            ...
        </servlet-mapping>
    
        <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
            <async-supported>true</async-supported>
        </filter>
    
        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    
    0 讨论(0)
  • 2020-12-19 14:01

    Add the below in nginx.conf file if you are using the reverse proxy.

      # For WebSocket upgrade header
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
    
    0 讨论(0)
提交回复
热议问题