我正在使用以下配置使用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
。