Spring Security AbstractAuthenticationProcessingFilter扩展丢失实例变量值

时间:2015-06-09 21:32:27

标签: java spring spring-security

再一次,我希望我在这里做一些非常愚蠢的事情。 :)

我在Spring Security实现中有AbstractAuthenticationProcessingFilter的扩展名,在该扩展名中,在attemptAuthentication方法中,我访问了传入的HttpServletRequest对象并提取了一个标题值,我存储在一个实例变量中。

我注意到,有时候,在我的项目中调用另一个自定义方法时,该实例变量的值为null。但这并不一致。

我在自定义方法中看不到任何负责覆盖变量的代码,所以,我试图缩小范围。我希望这不是我所忽视的线程安全,或某种竞争条件。

之前有没有人遇到这样的事情?

我正在使用 Spring 4.1.1 Spring Security 3.2.5

提前感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

容器只会创建一个过滤器的实例,因此任何可变的实例变量都不是线程安全的。任何并发请求都可能导致实例变量的状态不一致。你应该研究HttpSession

回应评论:

并不是说你必须使用HttpSession,不要在servlet / filter中使用实例变量,因为它们不是线程安全的。如果您需要维护状态,并且您不想使用会话,那么AFAIK,您需要在每次请求时传递客户信息。