2017-07-28 15 views
1

我正在开发一个支持异步操作的servlet。 该servlet将通过多个过滤器进行调用。一些过滤器是通过DelegatingFilterProxy创建的FilterProxyChain的一部分。如何为通过Spring DelegatingFilterProxy链调用的过滤器设置异步支持标志?

如果我们必须从一个servlet启动一个异步上下文,那么过滤器链应该也支持异步操作。否则下面的例外获取引发 -

28-JUL-2017 09:41:51.196严重[HTTP-NIO-127.0.0.1-7441-EXEC-2] org.apache.catalina.core.StandardWrapperValve.invoke的Servlet .service()用于与path []上下文中的servlet [eventBus]抛出异常 java.lang.IllegalStateException:当前链的过滤器或servlet不支持异步操作。 在org.apache.catalina.connector.Request.startAsync(Request.java:1630) 在org.apache.catalina.connector.Request.startAsync(Request.java:1623) 在org.apache.catalina.connector。 RequestFacade.startAsync(RequestFacade.java:1030) 在javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:379) 在javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:379) 在org.springframework.security。 web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.startAsync(HttpServlet3RequestFactory.java:167) 在com.amdocs.vshield.vsm.asyncrest.VsmAsyncRestController.doGet(VsmAsyncRestController.java:89) 在javax.servlet.http.HttpServlet.service( HttpServlet.java:622) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain。 doFilter(ApplicationFilterChain.java:207)

一些通过DelegatingFilterProxy调用的过滤器没有明确地在web.xml中配置。 那么如何让这些过滤器支持异步?

回答

1

这里是他们在说什么这里:https://spring.io/blog/2012/12/17/spring-security-3-2-m1-highlights-servlet-3-api-support/#servlet3-async

所以:

  1. Spring Security的版本必须是至少3.2
  2. web.xmlwebapp元素必须有version="3.0"
  3. DelegatingFilterProxy<filter>元素必须有<async-supported>true</async-supported>
  4. 其地图平应具备以下条件:

<dispatcher>REQUEST</dispatcher> <dispatcher>ASYNC</dispatcher>

+0

它不工作。尽管如此,它仍然会失败,同样的例外我们如何配置过滤器来支持通过DelegatingProxyFilter调用的异步请求? –

0

终于找到了根源。 web.xml中有一些错误,因为它没有正确部署servlet /过滤器。不知道为什么tomcat没有在这种情况下启动失败。 您必须添加所有过滤器(来自过滤链)/ servlet。价值为真。

相关问题