不使用 AbstractHttpSessionApplicationInitializer 或 web.xml 在 spring-session 中连接?

Wiring in spring-session without using AbstractHttpSessionApplicationInitializer or web.xml?

所以我有一个现有的内部应用程序框架,它只需要消费应用程序在其 web.xml 中注册一个过滤器 - 一个引用 CompositeFilter 的 DelegatingFilterProxy。作为 CompositeFilter 的一部分,我们有一系列特定顺序的其他过滤器(一些自定义、springSecurityFilterChain 等)。

我现在想将 spring-session 加入其中,但我不想使用 WebApplicationInitializer(我需要支持 servlet 2.5 容器),也不想让每个应用程序都修改他们 web.xml。我想将它作为我们内部框架的一部分提供,只需将 springSessionRepositoryFilter 放入我们的 CompositeFilter 中即可。看起来很简单 - 但似乎无论我把它放在哪个位置(我们目前有 11 个左右的其他过滤器)似乎都不起作用。我们的身份验证似乎失败了,一切都无法正常工作。如果我手动将 springSessionRepositoryFilter 直接添加到 web.xml,一切都可以正常工作 - 所以我很困惑。有帮助吗?

我想通了。 SessionRepositoryFilter 必须在过滤器链中位于 RequestContextFilter 之前。还必须确保在 Spring 安全性中关闭禁用 url 重写,因为 springSecurityFilterChain 将在 SessionRepositoryFilter 之后。如果您不这样做,那么使用 _s 参数重写 URL 将不起作用。