我试图在现有的springmvc(ver5.1.6)应用程序中实现springredis会话。在web.xml中,我们定义了contextloaderlistener、dispatcherservlet和contextconfiglocation。
在包含必需的依赖项并完成建议的代码更改后,我得到以下错误:
原因:java.lang.illegalstateexception:无法初始化上下文,因为已经存在根应用程序上下文-请检查web.xml!“}中是否有多个contextloader定义*
作为代码更改的一部分,我正在扩展类“abstracthttpsessionapplicationinitializer”(来自spring会话核心库),它在内部实现webapplicationinitializer。似乎这是试图创建另一个上下文并抛出上述错误。我们不能避免扩展这个类,因为它完成了将redishttpsession注册到上下文的工作。
大多数可用的例子都与 Spring 启动。这样他们就不会面对这个问题了。
除了完全替换web.xml并仅使用webapplicationinitializer之外,还有其他解决方案吗?
1条答案
按热度按时间wvmv3b1j1#
只是想提供一个更新。我没有扩展abstracthttpsessionapplicationinitializer类,而是采用了一种不同的方法,通过XMLBean定义初始化BeanRedishttpSessionConfiguration。
这种方法奏效了。
遵循以下线程中提到的步骤;如何配置spring会话以在xml中使用redis?
除此之外,我们还需要序列化cookie;
@Bean public CookieSerializer cookieSerializer() { DefaultCookieSerializer serializer = new DefaultCookieSerializer(); serializer.setCookieName("SESSIONID"); serializer.setCookiePath("/"); serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); return serializer; }