通过context.addListener(...)添加RequstContextListener并不起作用。但是通过@Bean注释方法添加它

时间:2016-03-27 18:08:25

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

我正在使用以下配置使用Spring Security初始化一个基本的Spring Boot应用程序。

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        servletContext.addListener(new RequestContextListener());
    }
}

尝试访问@Autowired中的HttpServletRequest UserDetailsService时,我面临与在正确的上下文之外访问请求相关的IllegalStateException。 ("未找到线程绑定请求")

但是,当我像这样配置我的应用程序时:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
    }

    @Bean
    public RequestContextListener requestContextListener() {
        return new RequestContextListener();
    }
}

使用@Autowired依赖项时调用的Spring代理按预期工作。我想知道为什么后者有效,当我看到大量的Spring Boot配置示例时,只需用.addListener()调用RequestContextListener

0 个答案:

没有答案