我正在使用Spring / Spring MVC做一个网站项目我学会了如何使用java类和注释方法配置spring,这远远比XML更好。
现在我想在我的应用程序中使用Spring Security。但是我无法理解如何使用现有的WebApplicationInitializer
配置它?
这是我的代码以及到目前为止的内容:
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
初始化
答案 0 :(得分:1)
例外情况告诉您,在您的情况下,您没有ContextLoaderListener
。您只有DispatcherServlet
。默认情况下,Spring Security将仅从根应用程序上下文(由ContextLoaderListener
加载的上下文)中查找过滤器。
如果你想让它使用DispatcherServlet
的上下文,你必须告诉它。您可以通过覆盖getDispatcherWebApplicationContextSuffix()
方法告诉它使用哪个。
您不仅限于单个WebApplicationInitializer
,一般情况下您可以拥有多个应用程序引导,另一个用于添加安全性。然后,您可以利用Spring便捷类来保存几行代码。有关示例,请参阅Spring Security Reference。