2014-09-03 2 views
1

Я делаю проект веб-сайта с Spring/Spring MVC. Я узнал, как настроить весну с помощью классов java и аннотаций, которые, безусловно, лучше, чем XML.Как настроить Spring Security с уже существующим WebApplicationInitializer?

Теперь я хочу использовать 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

Исключение говорит вам, что вы не имеете ContextLoaderListener, который, в вашем случае, это верно. У вас есть только DispatcherServlet. По умолчанию Spring Security будет искать фильтры только из корневого контекста приложения (тот, который загружается ContextLoaderListener).

Если вы хотите, чтобы он использовал контекст DispatcherServlet, вместо этого вы должны это сказать. Вы можете сказать, что использовать, переопределяя метод getDispatcherWebApplicationContextSuffix().

Вы не ограничены ни одним WebApplicationInitializer, у вас может быть несколько, в общем, вы хотите, чтобы один для вашего приложения загружался, а другой - для повышения безопасности. Затем вы можете использовать классы Spring, чтобы сохранить пару строк кода. См. Spring Security Reference для образца.