在 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;
}
我正在尝试在现有 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;
}