美文网首页
Web学习笔记 - 第011天

Web学习笔记 - 第011天

作者: 迷茫o | 来源:发表于2017-02-16 17:25 被阅读0次

    过滤器

    简介

    对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);
            }
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Web学习笔记 - 第011天

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