在 spring mvc+spring security+spring session redis web 应用程序中同时使用 WebApplicationInitializer 和 web.xml

Using both WebApplicationInitializer and web.xml in spring mvc+spring security+spring session redis web application

我正在尝试在现有 Spring MVC(版本 5.1.6)应用程序中实施 Spring redis 会话。在 web.xml 中我们定义了 ContextLoaderListener、DispatcherServlet 和 contextConfigLocation。

包含所需的依赖项并完成建议的代码更改后,出现以下错误:

原因:java.lang.IllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文 - 检查您是否有多个 ContextLoader 定义你的 web.xml!"}}*

作为代码更改的一部分,我正在扩展内部实现 WebApplicationInitializer 的 class“AbstractHttpSessionApplicationInitializer”(来自 Spring 会话核心库)。似乎是在尝试创建另一个上下文并抛出上述错误。我们无法避免扩展这个 class,因为这是将 redisHttpSession 注册到上下文的工作。

大多数可用示例都带有 spring 引导。所以他们不会遇到这个问题。

除了完全替换 web.xml 并仅使用 WebApplicationInitializer 之外,还有其他解决方案吗?

只想提供更新。我没有扩展 AbstractHttpSessionApplicationInitializer abtract class,而是采用了不同的方法,通过 XML bean 定义初始化 bean RedisHttpSessionConfiguration。

这种方法奏效了。

按照以下线程中提到的步骤进行操作; How to configure Spring sessions to work with Redis in xml?

除此之外,我们还需要序列化 ​​cookie;

<pre><code>@Bean public CookieSerializer cookieSerializer() { DefaultCookieSerializer serializer = new DefaultCookieSerializer(); serializer.setCookieName("SESSIONID"); serializer.setCookiePath("/"); serializer.setDomainNamePattern("^.+?\.(\w+\.[a-z]+)$"); return serializer; }