需求场景:在登录过滤器中需要使用配置文件的参数值,使用Autowired注入配置类一直为null,但在controller层使用注入是能取到值得。就猜想是否是执行顺序的问题。
Bug原因:web应用启动的顺序是:listener->filter->servlet
Bug解决:
①:在init方法中使用filterConfig参数。
ServletContext context = filterConfig.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
LoginProperties loginProperties = ctx.getBean(LoginProperties.class);
②:如果在dofilter方法中也可以使用request参数。
ServletContext context = request.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
Bean = ctx.getBean(Bean.class);