java 防止盗链AntiLeech

防止盗链的方法有很多

这里采用如下方法,

方法:判断引用地址

这个方法是最早及最常见的方法。所谓判断引用地址,就是判断浏览器请求时HTTP头的Referer字段的值,这个值在asp.net里面可以用 Request.UrlReferrer属性取得。几个例子来说,在正常情况下当用户在浏览 http://uushare.com/abc.html 时点击一个链接去到 http://uushare.com/jacky.mp3 文件时,浏览器在发出请求jacky.mp3 资源时还会附带当刻浏览器所处的页面地址(即http://uushare.com/abc.html),所以当你的网站程序接收到下载 jacky.mp3 资源请求的时候,先判断http的referer字段的值,如果是从 自己的域名(uushare.com)过来的,则可以认为是合法的连接请求,否则就返回一个错误的提示信息。

这种方法通常用于图片、 mp3这种容易被人用html“嵌入”到其他网站的资源,使用这种方法可以防止你的图片直接出现在别人的网页里(或者防止mp3直接被其他网站嵌入到 flash播放器里),不过访客使用下载工具还是可以轻松下载,因为现在的下载工具一般会自动用你的域名构造一个引用地址,所以如果想再进一步防范的话,可以使用一个对应表限制每个资源的引用地址,例如将 jacky.mp3 的引用地址限制为 http://uushare.com/abc.htmlid=12345,这样下载工具就不太可能构造一个“正确”的引用地址了。

介绍完原理,下面是实例代码(使用filter来进行过滤,因为都是现敲,只附上主要现实部分代码)

doFilter方法部分代码

    HttpServletRequest httpRequest = (HttpServletRequest)request ;

    HttpServletResponse httpResponse = (HttpServletResponse)response;

    String referer = httpRequest.getHeader("referer");

    String contextPath = httpRequest.getContextPath();

    String uri = httpRequest.getRequestURI();

    uri = formatUri(uri);

    String subUri = uri.subString(contextPath.length);

    if(referer==null && uriPass(subUri)){

    String redirectPage = "/myProgect/errorPage.jsp";

    httpResponse.sendRedirect(contextPath+redirectPage) ;

    return; 

    }

    chain.doFilter(request , response);

   //继续执行其他filter 如  request.setCharacterEncoding("UTF-8");

    =========补充方法=====

   private String formatUri(String oldUri){

   if(oldUri != null){

    oldUri = StringUtils.replaceChars(oldUri,"\\","/");

    if(oldUri.contains("/")){

    String uriArray = StringUtils.split(oldUri,"/")

    String new Str = "";

      if(uriArray.length>0){

         for(int i,i

          newStr = newStr.concat("/").concat(

                          StringUtils.replaceChars(uriArray[i],"/",""));

         }

      }

    oldUri = newStr;

    }

   }

   return oldUri;

  }

 

  private boolean uriPass(String uri){

   boolean flag = true ;

   if(uri.endsWith("/errorPage.jsp")

      ||uri.endsWith("/index.jsp")){

      flag = false;

     }

  return flag;

  } 

 

 

你可能感兴趣的:(java_utils)