Spring Session without additional context initialization?

元气小坏坏 提交于 2019-12-08 10:52:09

问题


I'm trying to use the recently released Spring Session library to do external session management in Redis. I'm using this guide. When I try to start my server, I get this error:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!

I assume this is because my webapp already has code for context initialization. I would prefer to leave that code as is. Is there some way to achieve the result of that tutorial without having to do an additional context initialization? It doesn't really seem like it should be necessary if I can add the springSessionRepositoryFilter bean and corresponding filter object myself, but I don't know how the Spring Session code does that internally.


回答1:


With Spring Boot application it does not need using initializer classes as spring offical reference: http://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/guides/boot.html .

Also using spring security you can check below spring tutorial: https://github.com/spring-projects/spring-session/tree/master/samples/javaconfig/security/src/main/java/sample

import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;


public class Initializer extends AbstractHttpSessionApplicationInitializer {

}

If you want to configure with maven instead of gradle you can check my answer in comment. Hope it helps!




回答2:


The changes you need to make to your existing initializer should be minimal. First, it probably implements WebApplicationInitializer currently and this should be changed to extend AbstractHttpSessionApplicationInitializer. Second, in your onStartup method, add super.onStartup(servletContext) after your existing initialization code.

public class Initializer extends AbstractHttpSessionApplicationInitializer
{
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException
    {
        // existing code

        super.onStartup(servletContext);
    }
}

I know you were not wanting to change your initializer, but this is a very minimal approach to make it work.



来源:https://stackoverflow.com/questions/28754124/spring-session-without-additional-context-initialization

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!