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

在spring mvc+;中同时使用WebApplicationInitializer和web.xml;spring security+;spring会话redis web应用程序,spring,session,redis,Spring,Session,Redis,我试图在现有的SpringMVC(5.1.6版)应用程序中实现SpringRedis会话。在web.xml中,我们定义了ContextLoaderListener、DispatcherServlet和contextConfigLocation 在包含所需的依赖项并完成建议的代码更改后,我得到以下错误: 原因:java.lang.IllegalStateException:无法初始化上下文,因为已经存在根应用程序上下文-检查web.xml中是否有多个ContextLoader定义!“}}* 作为代

我试图在现有的SpringMVC(5.1.6版)应用程序中实现SpringRedis会话。在web.xml中,我们定义了ContextLoaderListener、DispatcherServlet和contextConfigLocation

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

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

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

大多数可用的例子都是spring boot,所以他们不会遇到这个问题


除了完全替换web.xml并仅使用WebApplicationInitializer之外的任何解决方案?

只是想提供一个更新。我没有扩展AbtractHttpSessionApplicationInitializer类,而是通过xml bean定义初始化bean RedistHttpSessionConfiguration,采取了不同的方法

这种方法奏效了

遵循以下线程中提到的步骤;

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


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