如何在spring应用程序的servlet过滤器中自动装配bean?

时间:2015-08-20 19:59:47

标签: spring spring-mvc dependency-injection spring-boot autowired

我有一个 PGM DCL VAR(&LIB) TYPE(*CHAR) LEN(10) VALUE('A2LIB14') DCL VAR(&MSG) TYPE(*CHAR) LEN(80) VALUE('*** S T + O P *** READ YOU HAVE READ ALL + INSTRUCTIONS CAREFULLY') SNDMSG MSG(MSG) TOUSR(*REQUESTER) DSPMSG ADDLIBLE LIB(&LIB) STRDFU OPTION(*SELECT) FILE(&LIB/TVSHOWSL) MBR(*FIRST) CRTPF FILE(TVSHOWS) RCDLEN(10) DSPOBJD OBJ(TVSHOWSL1) OBJTYPE(*LF) WRKJOB JOB(**) ENDPGM 申请。

我的项目中没有spring-bootApplicationContext.xml个文件。我更喜欢避免使用它们并使用Java代码配置所有内容。

我已经阅读了以下有关servlet过滤器中bean注入的帖子。

  1. How can I get a Spring bean in a servlet filter?

  2. http://www.deadcoderising.com/2015-05-04-dependency-injection-into-filters-using-delegatingfilterproxy/

  3. spring injection in servlet filter

  4. 阅读完毕后,我开始使用web.xml

    我的问题是如何将DelegatingFilterProxy bean过滤掉并避免使用autowire文件,特别是对DelegatingFilterProxy配置。

    剪切的代码可从github.

    中托管的第二篇文章中获取
    xml

1 个答案:

答案 0 :(得分:6)

您应该向主Application类添加FilterRegistrationBean(使用@SpringBootApplication注释的类)并让Spring提供AuditHandler的实例:

@Bean
@Autowired
public FilterRegistrationBean auditFilterRegistration(AuditHandler handler) {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new AuditFilter(handler));
    filterRegistrationBean.setOrder(3); // ordering in the filter chain
    return filterRegistrationBean;
}

如果这不起作用(例如,您的AuditHandler实施没有正确注释,或者它不在默认包扫描路径上),您可以指示Spring提供它(也在您的{ {1}}带注释的类):

@SpringBootApplication