如何使用现有的WebApplicationInitializer配置Spring Security?

时间:2014-09-03 08:53:23

标签: java spring spring-mvc spring-security

我正在使用Spring / Spring MVC做一个网站项目我学会了如何使用java类和注释方法配置spring,这远远比XML更好。

现在我想在我的应用程序中使用Spring Security。但是我无法理解如何使用现有的WebApplicationInitializer配置它?

The Spring documentation不太清楚。

这是我的代码以及到目前为止的内容:

public class AppInitializer implements WebApplicationInitializer{
//public class AppInitializer {


    private static final Class<?>[] CONFIG_CLASSES = new Class<?>[]{SiteConfigs.class, AdminConfigurations.class};

    public void onStartup(ServletContext servletContext) throws ServletException {

        AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
        appContext.register(CONFIG_CLASSES);

        DispatcherServlet servlet = new DispatcherServlet(appContext);
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", servlet);
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

    }

}

如果我将AbstractSecurityWebApplicationInitializer添加到容器抛出的类路径中  异常。

HTTP Status 500 - No WebApplicationContext found: no ContextLoaderListener registered?  

那么如何配置Spring Security以便springSecurityFilterChain初始化

1 个答案:

答案 0 :(得分:1)

例外情况告诉您,在您的情况下,您没有ContextLoaderListener。您只有DispatcherServlet。默认情况下,Spring Security将仅从根应用程序上下文(由ContextLoaderListener加载的上下文)中查找过滤器。

如果你想让它使用DispatcherServlet的上下文,你必须告诉它。您可以通过覆盖getDispatcherWebApplicationContextSuffix()方法告诉它使用哪个。

您不仅限于单个WebApplicationInitializer,一般情况下您可以拥有多个应用程序引导,另一个用于添加安全性。然后,您可以利用Spring便捷类来保存几行代码。有关示例,请参阅Spring Security Reference