将SecurityWebApplicationInitializer添加到现有的Spring应用程序中

时间:2016-01-29 16:58:17

标签: java spring spring-mvc spring-security spring-java-config

我尝试按照this question的答案,但仍然无法使其发挥作用。 我有以下Java配置类:

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) throws ServletException {
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
          rootContext.register(WebAppConfiguration.class);
          container.addListener(new ContextLoaderListener(rootContext));
          AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();  
          ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
          dispatcher.setLoadOnStartup(1);
          dispatcher.addMapping("/");
    }
}

为安全起见:

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {
    public SecurityWebApplicationInitializer() {
        super(WebSecurityConfiguration.class);
    }
}

问题是我在启动时遇到异常:

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!

没有SecurityWebApplicationInitializer类,它启动并且工作正常,除了Spring Security不起作用。 我理解问题是SecurityWebApplicationInitializer注入了它自己的上下文。但是,让Spring Security为我的案例工作的正确方法是什么? 谢谢。

0 个答案:

没有答案