找不到WebApplicationContext:没有注册ContextLoaderListener?但不是每次启动服务器

时间:2015-07-17 01:46:39

标签: java spring

我真的需要你的帮助来解决这个问题......我正在使用Spring-MVC 4.1.6.RELEASE,Spring-Security 4.0.0.RELEASE

我有这个错误只是......"有时"当我启动服务器时。这有时会发生真正的问题。

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered?
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:252)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

然后你会说,你只需要添加一个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!

但它并不总是......所以我猜上下文被初始化的顺序有些不对,但我不知道如何修复它......

这些是我的配置类:

WebInitializer.java

public class WebInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext servletContext)
        throws ServletException {

    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    rootContext.register(ServerApplicationConfig.class);
    servletContext.addListener(new RequestContextListener());
    servletContext.addListener(new ContextLoaderListener(rootContext));

    FacesServlet facesServlet = new FacesServlet();
    ServletRegistration.Dynamic facesServletDynamic = servletContext.addServlet("facesServlet", facesServlet);
    facesServletDynamic.addMapping("*.jsf");
    facesServletDynamic.setLoadOnStartup(1);
    servletContext.addListener(ConfigureListener.class);

    //Oauth2Filter
    servletContext.addFilter("auth2ClientContextFilter", OAuth2ClientContextFilter.class);

    }
}

ServerApplicationConfig.java

    @EnableWebMvc
@Import({ WebSecurityConfig.class, HibernateConfig.class })
@ComponentScan(basePackages = { "com.agrichem.server" }, scopedProxy = ScopedProxyMode.TARGET_CLASS)
@Configuration
public class ServerApplicationConfig {

    @Bean
    public PropertyPlaceholderConfigurer getPropertyPlaceholderConfigurer() {
        TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));

        PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();

        ClassPathResource[] resources = new ClassPathResource[] {
                new ClassPathResource("jdbc.properties"),
                new ClassPathResource("oada-client.properties") };

        ppc.setLocations(resources);

        return ppc;
    }

    @Bean
    @Qualifier("viewResolver")
    public ViewResolver getViewResolver() {
        UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
        viewResolver.setViewClass(JsfView.class);
        viewResolver.setPrefix("/views/");
        viewResolver.setSuffix(".xhtml");

        return viewResolver;
    }
}

WebSecurityInitializer.java

@Configuration
@Order(1)
public class WebSecurityInitializer extends
        AbstractSecurityWebApplicationInitializer {

}

WebSecurityConfig.java

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    @Qualifier("customUserDetailsService")
    private UserDetailsService customUserDetailsService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.userDetailsService(customUserDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();

        http.logout().logoutUrl("/logout.jsf").permitAll()
                .logoutSuccessUrl("/home/login.jsf");

        http.authorizeRequests()
                .antMatchers("*.css", "*.js", "**.gif", "*.jpg", "*.jpeg",
                        "*.png", "*.css.jsf", "*.js.jsf", "**.gif.jsf",
                        "*.jpg.jsf", "*.jpeg.jsf", "*.png.jsf")
                .permitAll()
                .antMatchers("/**/*.css", "/**/*.js", "/**/*.gif", "/**/*.jpg",
                        "/**/*.jpeg", "/**/*.png", "/**/*.css.jsf",
                        "/**/*.js.jsf", "/**/*.gif.jsf", "/**/*.jpg.jsf",
                        "/**/*.jpeg.jsf", "/**/*.png.jsf")
                .permitAll()
                .antMatchers("/**/*.woff2", "/**/*.eot", "/**/*.woff",
                        "/**/*.ttf", "/**/*.svg", "*.woff2", "*.eot", "*.woff",
                        "*.ttf", "*.svg", "/**/*.woff2.jsf", "/**/*.eot.jsf", "/**/*.woff.jsf",
                        "/**/*.ttf.jsf", "/**/*.svg.jsf", "*.woff2.jsf", "*.eot.jsf", "*.woff.jsf",
                        "*.ttf.jsf", "*.svg.jsf")
                .permitAll();

        http.authorizeRequests().antMatchers("/admin/**.jsf").hasRole("ADMIN");

        // http.authorizeRequests().antMatchers("/farms/**.jsf").hasAnyRole("HEAD_OFFICER");

        http.authorizeRequests().antMatchers("/home/logout.jsf").permitAll()
                .antMatchers("/rest/**").permitAll();

        http.authorizeRequests().anyRequest().authenticated().and().formLogin()
                .loginPage("/home/login.jsf").permitAll()
                .failureUrl("/home/login.jsf?error=denied").permitAll()
                .defaultSuccessUrl("/home/index.jsf", true);
    }

}

提前感谢您的帮助。

0 个答案:

没有答案