了解Spring 3.2.8中的spring过滤器

时间:2015-11-11 10:12:28

标签: spring spring-mvc spring-security

出于安全原因,我正在实现一个过滤器....页面被冻结的点,我不确切知道为什么,因为过滤器实际上还没有做任何事情!

<!-- spring security csrf -->
        <filter>
            <filter-name>springSecurityFilterChain</filter-name>
            <filter-class>fr.telecom.support.context.DevicesSecurityFilter</filter-class>
        </filter>

        <filter-mapping>
            <filter-name>springSecurityFilterChain</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

这是我的过滤器:

public class DevicesSecurityFilter extends DelegatingFilterProxy {

    public DevicesSecurityFilter() {
        // TODO Auto-generated constructor stub
    }

    public DevicesSecurityFilter(Filter delegate) {
        super(delegate);
    }

    public DevicesSecurityFilter(String targetBeanName) {
        super(targetBeanName);
    }

    public DevicesSecurityFilter(String targetBeanName,
            WebApplicationContext wac) {
        super(targetBeanName, wac);
    }

    public void doFilter(ServletRequest request,
                         ServletResponse response,
                         FilterChain filterChain) throws ServletException, IOException {


        System.out.println ("do Filter...");

        //super.doFilter(request, response, filterChain);

    }

}

1 个答案:

答案 0 :(得分:4)

过滤器 执行某些操作:它会阻止请求转到链中的下一个过滤器/ servlet,并且不会向响应发送任何内容。所以它基本上拦截了所有请求,并以对所有请求的空白响应作出响应。

要使过滤器为&#34;透明&#34;,其doFilter()方法必须包含

filterChain.doFilter(request, response);

或者,因为它是DelegatingFilterProxy,它根本不应该有任何doFilter()方法,而是让父母的doFilter方法实现它的工作:委托给Spring bean它& #39;配置使用。实际上,您甚至不应该创建DelegatingFilterProxy的子类:正如其名称所示,它本身可以通过委派到Spring bean来工作。 Spring bean应该是进行过滤工作的人。

通过覆盖doFilter()方法,您可以防止该授权发生。