Spring安全过滤器干扰了线程请求处理?

时间:2016-02-11 19:04:48

标签: java spring multithreading spring-mvc spring-security

这个问题的标题很难,因为我们甚至无法诊断问题的确切来源。请允许我首先构建应用程序的结构,然后跟进我们遇到的问题。

设置

我们有一个使用Spring Security的大型多模块Spring 4.x应用程序。 Spring安全性提倡使用过滤器来检查请求上的属性,以确定它是否应该被请求处理程序拒绝或处理。我们使用这些,我们的身份验证适用于单个请求。但是,我们的身份验证基于我们内部服务的许多数据模型。要在过滤器中访问这些数据模型,我们注入&#34;服务bean&#34; (引用因为它们实际上是WITH CUSTOMERSWITHLESSTHANFOURORDERS AS ( SELECT CUSTOMERNUMBER FROM CLASSICMODELS.ORDERS GROUP BY CUSTOMERNUMBER HAVING COUNT(CUSTOMERNUMBER) < 4 ) SELECT O.CUSTOMERNUMBER, C.CUSTOMERNAME, E.LASTNAME, E.FIRSTNAME, E.EMPLOYEENUMBER FROM CUSTOMERSWITHLESSTHANFOURORDERS O JOIN CLASSICMODELS.CUSTOMERS C ON O.CUSTOMERNUMBER = C.CUSTOMERNUMBER JOIN CLASSICMODELS.EMPLOYEES E ON E.EMPLOYEENUMBER = C.SALESREPEMPLOYEENUMBER; 但是包含我们的服务层)到过滤器中。我们的一个过滤器@Components根据请求参数检索了几个这样的模型,然后在继续链之前将这些模型放在请求的属性中。

链中的后续过滤器从请求的属性中检索这些模型,并使用它们来确定用户是否已获得授权。

所有&#34;服务bean&#34;以这种方式注入的标记有以下注释:

EarlyLoadingFilter

问题

在使用请求使服务器饱和时,我们遇到了一些线程安全问题。在正常使用期间,它完全按照我们的预期执行。然而,在负载下,当在短时间内处理大量请求时,我们发现给定请求可以基于先前请求的数据接收响应。也就是说,似乎请求之间保留了请求属性。

现在,我意识到servlet过滤器是单例,但我们在任何过滤器中依赖的唯一实例变量是服务的自动装配bean。

我们是否可能会忽略Spring或Spring Security的一些关键配置?有没有办法利用Spring的HandlerInterceptors来实现与我们的身份验证相同的结果,而无需在servlet过滤器中捣乱?我们认为这是线程或过滤器相关的吗?

提前感谢您提供的任何帮助,这个问题已经变得令人生气!

0 个答案:

没有答案