美文网首页
Filter代理DelegatingFilterProxy

Filter代理DelegatingFilterProxy

作者: 穿山甲123 | 来源:发表于2017-02-16 00:29 被阅读0次

有时候我们要在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就行了。

相关文章

网友评论

      本文标题:Filter代理DelegatingFilterProxy

      本文链接:https://www.haomeiwen.com/subject/iadcwttx.html