Web学习笔记 - 第011天

过滤器

简介

对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器之间的请求与响应信息,并对这些信息进行过滤。
当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如果有,那么容器将把请求交给过滤器进行处理。
在过滤器中,你可以改变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时候,容器同样会将响应先转发给过滤器,在过滤器中你可以对响应的内容进行转换,然后再将响应发送到客户端。

常见的过滤器用途主要包括

对用户请求进行统一认证、对用户的访问请求进行记录和审核、对用户发送的数据进行过滤或替换、转换图象格式、对响应内容进行压缩以减少传输量、对请求或响应进行加解密处理、触发资源访问事件、对XML的输出应用XSLT等。

和过滤器相关的接口主要有

Filter、FilterConfig和FilterChain。

部署过滤器的方法

1.注解

@WebServlet(urlPatterns="/edit_emp.do", loadOnStartup=1)

坏处:无法确定过滤器的执行顺序
2.配置web.xml

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>com.kygo.filters.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>

好处:可以确定过滤器的执行顺序,先写先执行

例子1:改变编码
// @WebFilter(urlPatterns={"*.do"})
public class CharacterEncodingFilter implements Filter {

    public CharacterEncodingFilter() {

    }

    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        // 在请求小服务之前要做的处理
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        
        // 过滤器链条 继续下一个过滤器 
        chain.doFilter(req, resp);
        
        // 在请求小服务之后要做的处理
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }

}
例子2:不让其他网站使用自己服务器上的图片资源
@WebFilter(urlPatterns={"*.jpg", "*.png", "*.gif"})
public class ImageProtectionFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String referer = request.getHeader("Referer");
        if (referer != null) {
            chain.doFilter(req, resp);
        }
        else {
            HttpServletResponse response = (HttpServletResponse) resp;
            response.sendError(404);
        }
    }

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

推荐阅读更多精彩内容