Spring security SpringSecurity4在尝试流式传输/下载时关闭与浏览器的连接(VaadinUI)

Spring security SpringSecurity4在尝试流式传输/下载时关闭与浏览器的连接(VaadinUI),spring-security,Spring Security,我正在升级到Java8、Spring4和SpringSecurity4(来自Java7、Spring/Security3,所有东西都可以工作)。升级后,除了能够从服务器下载/流式传输到浏览器之外,其他一切都可以正常工作 对于UI,我们使用Vaadin。在一个实例中,我在浏览器中创建了一个框架,该框架应显示PDF,并在输入流中提供类型为application/PDF的数据。在其他情况下,流返回浏览器以保存为文件 在Java中调试时,我看到一个开放的InputStream,其中包含要在浏览器中下载的

我正在升级到Java8、Spring4和SpringSecurity4(来自Java7、Spring/Security3,所有东西都可以工作)。升级后,除了能够从服务器下载/流式传输到浏览器之外,其他一切都可以正常工作

对于UI,我们使用Vaadin。在一个实例中,我在浏览器中创建了一个框架,该框架应显示PDF,并在输入流中提供类型为application/PDF的数据。在其他情况下,流返回浏览器以保存为文件

在Java中调试时,我看到一个开放的InputStream,其中包含要在浏览器中下载的数据。数据从输入流读取并写入同样打开的response.OutputStream。但是,当Tomcat尝试将输出流数据写入套接字时,它会抛出下面可以看到的异常(Tomcat 8.5在尝试写入数据时抛出异常,Tomcat 7在尝试刷新数据时抛出异常-不同的实现)。与浏览器的连接似乎已终止。只有当应用程序使用Spring Security进行安全保护时,才会发生这种情况。如果我删除了安全性,一切都可以正常工作(它也可以与SpringSecurity3一起工作)

非常感谢您对解决此问题的任何帮助!请让我知道,如果我可以提供任何额外的信息来阐明这个问题

web.xml


多部件滤波器
org.springframework.web.multipart.support.MultipartFilter
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
多部件滤波器
/*
springSecurityFilterChain
/*
安全配置:


堆栈跟踪:

org.apache.catalina.connector.ClientAbortException:java.io.IOException:主机中的软件中止了已建立的连接
在org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:356)~[catalina.jar:8.5.13]
在org.apache.catalina.connector.OutputBuffer.appendByteArray(OutputBuffer.java:778)~[catalina.jar:8.5.13]
在org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:707)~[catalina.jar:8.5.13]
在org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:391)~[catalina.jar:8.5.13]
在org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:369)~[catalina.jar:8.5.13]
在org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)~[catalina.jar:8.5.13]
在org.springframework.security.web.util.OnCommittedResponseRapper$SaveContextServletOutputStream.write(OnCommittedResponseRapper.java:639)~[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在com.vaadin.server.DownloadStream.writeResponse(DownloadStream.java:307)~[vaadin-server-7.7.8.jar:7.7.8]
在com.vaadin.server.AbstractClientConnector.handleConnectorRequest(AbstractClientConnector.java:682)~[vaadin-server-7.7.8.jar:7.7.8]
在com.vaadin.server.ConnectorResourceHandler.handleRequest(ConnectorResourceHandler.java:90)[vaadin-server-7.7.8.jar:7.7.8]
在com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1422)[vaadin-server-7.7.8.jar:7.7.8]
在com.vaadin.server.VaadinServlet.service(VaadinServlet.java:380)[vaadin-server-7.7.8.jar:7.7.8]
在com.calcfocus.webui.util.CalcFocusServlet.service(CalcFocusServlet.java:21)[webui-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT]
在javax.servlet.http.HttpServlet.service(HttpServlet.java:742)[ServletAPI.jar:?]
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)[catalina.jar:8.5.13]
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[catalina.jar:8.5.13]
在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)[tomcat-websocket.jar:8.5.13]
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)[catalina.jar:8.5.13]
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)[catalina.jar:8.5.13]
在org.springframework.security.web.FilterChainProxy$virtualfilterchainproxy.doFilter(FilterChainProxy.java:317)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.FilterChainProxy$virtualfilterchainproxy.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.FilterChainProxy$virtualfilterchainproxy.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.FilterChainProxy$virtualfilterchainproxy.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
在org.springframework.security.web.FilterChainProxy$virtualfilterchainproxy.doFilter(FilterChainProxy.java:331)[spring-security-web-4.2.2.RELEASE.jar:4.2.2.RELEASE]
位于org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilte
<security:http auto-config='true' use-expressions="true" realm="Illustration System">
    <security:intercept-url pattern="/**" access="isFullyAuthenticated()" />
    <security:http-basic />
    <security:csrf disabled="true"/>
    <security:headers disabled="true"/>
</security:http>
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter{

   @Override    
   protected void configure(HttpSecurity http) throws Exception {
    http
       .csrf().disable()
       .headers().disable()

       .authorizeRequests()             
            .antMatchers("/").permitAll()           // home page
            .anyRequest().authenticated();
   }

   //... other methods
}