如何在spring应用程序的servlet过滤器中自动装配bean?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在spring应用程序的servlet过滤器中自动装配bean?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3379字,纯文字阅读大概需要5分钟。
内容图文
![如何在spring应用程序的servlet过滤器中自动装配bean?](/upload/InfoBanner/zyjiaocheng/827/5efe90d18a1b4ea8abebcc1d357e7d41.jpg)
我有一个spring-boot应用程序.
我的项目中没有ApplicationContext.xml或web.xml文件.我更喜欢避免使用它们并在Java代码中配置所有内容.
我已经阅读了以下有关servlet过滤器中bean注入的帖子.
> How can I get a Spring bean in a servlet filter?
> http://www.deadcoderising.com/2015-05-04-dependency-injection-into-filters-using-delegatingfilterproxy/
> spring injection in servlet filter
阅读完之后,我开始使用DelegatingFilterProxy.
我的问题是如何将bean自动装入过滤器并避免使用xml文件,尤其是DelegatingFilterProxy配置.
剪辑的代码可以在github.中托管的第二篇文章中找到
public class AuditHandler {
public void auditRequest(String appName, ServletRequest request) {
System.out.println(appName + ": Received request from " + request.getRemoteAddr() );
}
}
public class AuditFilter implements Filter {
private final AuditHandler auditHandler;
private String appName;
public AuditFilter(AuditHandler auditHandler) {
this.auditHandler = auditHandler;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
auditHandler.auditRequest(appName, request);
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
appName = filterConfig.getInitParameter("appName");
}
public void destroy() {}
}
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="auditHandler" class="com.deadcoderising.AuditHandler">
</bean>
<bean id="auditFilter" class="com.deadcoderising.AuditFilter">
<constructor-arg ref="auditHandler"/>
</bean>
</beans>
web.xml
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
metadata-complete="true">
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext*.xml</param-value>
</context-param>
<filter>
<filter-name>auditFilter</filter-name>
<filter-class>
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>appName</param-name>
<param-value>di-example</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>auditFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
解决方法:
您应该将FilterRegistrationBean添加到主Application类(使用@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提供它(也在您的@SpringBootApplication注释类中):
@Bean
public AuditHandler auditHandler() {
return new AuditHandlerImplementation();
}
内容总结
以上是互联网集市为您收集整理的如何在spring应用程序的servlet过滤器中自动装配bean?全部内容,希望文章能够帮你解决如何在spring应用程序的servlet过滤器中自动装配bean?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。