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

Posted 柯南&

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

以上是关于Servlet过滤器——仿盗链过滤器的主要内容,如果未能解决你的问题,请参考以下文章

java---servlet与filter的联系与区别

是否可以编写一个 servlet 过滤器来检查 HTTP 响应代码? [复制]

Servlet过滤器行为模棱两可?

servlet 过滤器(Filter)

javaweb-Servlet过滤器Filter

用servlet和过滤器实现简单的权限管理和敏感词过滤功能