我想在servletFilter
初始化后添加一个Applicationcontext
。原因是过滤器依赖于userdetailsService bean,而userdetailsService bean又是autowired
到其他依赖bean。问题是当我构建应用程序时,我可以看到onApplicationEvent
被调用,但是当我尝试从浏览器运行该应用程序时,过滤器没有被调用。
如何实现将过滤器添加到servlet上下文。
如果我将其添加到实现onStartup(ApplicationContext ctx)
的类的webApplicationInitializer
方法中,则会使用相同的过滤器,因为Bean尚未初始化,应用程序将抛出未定义的依赖项错误。
@Component
public class AppContextStartedListener implements ApplicationListener<ContextStartedEvent> {
@Autowired
private MyAppFilter myAppFilter;
@Override
public void onApplicationEvent(ContextStartedEvent event) {
System.out.println("Context started"); // this never happens
ServletContext = event.getServletContext // demo code to fetch Servlet
Context
FilterRegistere.Dynamic appFilter = ServletContext.addFilter("",myAppFilter)
appFilter.setInitParameter("init","initit")
}
}
答案 0 :(得分:0)
您可以在Configuration类中将过滤器声明为Bean:
@Configuration
public class MyConfig {
@Bean
public MyAppFilter myAppFilter() {
return new MyAppFilter();
}
}
这样,只有在应用上下文初始化后,您的过滤器才会发生。