Filter代理DelegatingFilterProxy

有时候我们要在java项目下写一个过滤器来实现某些功能,但是如果我们想在过滤器中通过某个bean查找数据库数据(filter依赖bean),这就会出问题,因为web.xml中元素加载顺序为conten-param -> listener -> filter -> servlet,在filter加载完成时,项目中的bean并没有装配,所以filter所依赖的bean为null,不能实现该功能。我们可以用DelegatingFilterProxy来实现这个功能!

filter实现bean


import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.entity.data.User;
import com.service.UserService;
@Component
public class UserFilter implements Filter {

    @Autowired
    private UserService userService;
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        User user = userService.getUser(1);
        /**
         * do something
         */
        chain.doFilter(request, response);
    }
    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
    }
}

web.xml添加下面代码

    <filter>  
        <filter-name>userFilter</filter-name>  
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>userFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

以上filter配置,我并没有将UserFilter的bean配置进去,只是有filter-name为userFilter,那是因为DelegatingFilterProxy会自动根据filter-name装配userFilter。DelegatingFilterProxy其实就是一个filter的代理,我们把filter当做一个bean来处理,然后用delegatingFilterProxy代理filter就行了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,246评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,999评论 6 342
  • 什么是Spring Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Jav...
    jemmm阅读 16,597评论 1 133
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,835评论 18 399
  • 最近赵丽颖在出席某个活动的时候,被记者问道对于自己没有入选90后四小花旦的问题时,大笑说“这跟我没有什么关系啊,”...
    不打烊实验室阅读 522评论 0 7