Servlet过滤器——仿盗链过滤器

1.概述

   介绍如何使用过滤器技术,防止通过其他URL地址直接访问本站资源。运行本实例,当URL地址不是本站地址时,在网页中将显示错误提示信息。

2.技术要点

主要应用request对象的getHeader()方法获取信息头来源地址,若是来自其它网站就弹出错误图片。getHeader()方法的语法结构如下:

public String getHeader(String headerName)

参数说明:

headerName:指定字符串类型的响应头名称。

3.具体实现

(1)创建Filter过滤器的实现类ImageFilter,在doFilter()方法中对request进行验证,实现将图片显示在页面之前,验证客户端请求是否来自本网站。主要代码如下:

public class ImageFilter implements Filter {
      public void init(FilterConfig config) throws ServletException {
      }
      public void doFilter(ServletRequest req, ServletResponse res,
                  FilterChain chain) throws IOException, ServletException {    
            HttpServletRequest request = (HttpServletRequest) req;                      //request对象
            HttpServletResponse response = (HttpServletResponse) res;                      //response对象
            String imurl = request.getHeader("imurl");                                      //链接的来源地址
            if (imurl == null || !imurl.contains(request.getServerName())) {          //判断访问来源
                  request.getRequestDispatcher("/errorimage.gif").forward(request,   //显示错误图片
                              response);
            } else {
                  chain.doFilter(request, response);                                       //正常显示图片
            }
      }
      public void destroy() {
      }
}

(2)在web.xml中配置Filter,该过滤器是从request信息头中获取请求来源,主要代码如下:

<filter>
      <filter-name>imageFilter</filter-name>
      <filter-class>com.mr.filter.ImageFilter</filter-class>
</filter>
<filter-mapping>
      <filter-name>imageFilter</filter-name>
      <url-pattern>/images/*</url-pattern>
</filter-mapping>
原文地址:https://www.cnblogs.com/zkn11199/p/5600296.html