javaweb 之 防盗链

防盗链:如果其他网站引用本网站的图片资源,显示一个错误图片。(即本站资源只能自己使用)

作用:其他网站如果引用本站资源,会加重服务器负荷和带宽。如果是用防盗链 则能减少服务器负荷。

引用来自: http://windyli.blog.51cto.com/1300305/315283

apache的tomcat使用filter能够轻松实现防盗链

如下:

1.定义一个防盗链filter

 a 实现Filter接口

 b.在web.xml中配置该filter 多个Filter通过 Filter-mapping 的前后顺序 来确定前后顺序

package com.it.cast.filter.image;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ImageFilter implements Filter{

    @Override
    //生命周期方法只会执行一次。在该Filter被销毁前执行
    public void destroy() {
        
    }

    @Override
    /**每次有客户端都会调用该方法*/
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)res;
        String referer = request.getHeader("referer");
        //外站链接
        if (referer == null || !referer.contains(request.getServerName())) {
            //显示错误图片
            request.getRequestDispatcher("/error.gif").forward(request, response);
        //本站链接 正常显示
        }else {
            System.out.println("request被处理之前。。");
            //chain.doFilter(request, response)方法一定要写上。否则不会执行servlet代码。
            /**注意:doFilter()中一定要执行chain.doFilter(request,response)
             * 否则request不会交给后面的filter或servlet*/
            chain.doFilter(request, response);
            System.out.println("request被处理之后,response抵达客户端浏览器之前");
        }
    }
    
    @Override
    //生命周期方法只会执行一次,在Filter加载时执行
    public void init(FilterConfig filterConfig) throws ServletException {
            
    }

}


web.xml中配置

<filter>
<filter-name>imageFilter</filter-name>
<filter-class>com.it.cast.filter.image.ImageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>imageFilter</filter-name>
<url-pattern>/images/*</url-pattern>
<url-pattern>upload/images/*</url-pattern>
<!-- dispatcher配置到达servlet的方式 有四种
REQUEST (默认) :仅当请求servlet时才有效
FORWORD:某servlet通过forword到达某servlet时才有效
INCLUDE:jsp中通过<jsp:include/>请求某servlet时才有效
ERROR :jsp中通过<%@ page errorPage = "error.jsp" %>指定错误页面时才有效
-->
<dispatcher></dispatcher><!-- 默认的,可以不写该标签 -->
</filter-mapping>






 

posted @ 2017-07-31 19:00  xie风细雨  阅读(159)  评论(0)    收藏  举报