做个图片的防盗链

转至做个图片防盗链

目的是,网站本身的图片不防盗链,用户上传的图片不许外链 


用户上传的图片都在userfile目录和其子目录下面 

1. 配置filter  
Xml代码   收藏代码
  1. <filter>     
  2.     <filter-name>jpgServlet</filter-name>     
  3.     <filter-class>     
  4.         com.djwl.core.filter.JpgFilter  
  5.     </filter-class>   
  6. </filter>  
  7. <filter-mapping>     
  8.     <filter-name>jpgServlet</filter-name>     
  9.     <url-pattern>/userfile/*</url-pattern>     
  10. </filter-mapping>  



2. Filter  
Java代码   收藏代码
  1. package com.djwl.core.filter;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11. import javax.servlet.http.HttpServletRequest;  
  12. import javax.servlet.http.HttpServletResponse;  
  13.   
  14. /** 
  15.  * Description: <br> 
  16.  * 2010-4-13 
  17.  * @author huxiao kskr@qq.com 
  18.  */  
  19. public class JpgFilter implements Filter {  
  20.   
  21.     @Override  
  22.     public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException {  
  23.         HttpServletRequest request = (HttpServletRequest)servletrequest;  
  24.         HttpServletResponse response = (HttpServletResponse)servletresponse;  
  25.   
  26.         //获取请求来源  
  27.         String linkFrom = request.getHeader("referer");  
  28.           
  29.         /** 
  30.          * 如果不是从本网站链接,则返回本网站的logo,否则正常走 
  31.          * 注意:这里的linkFrom为null的话也正常走。原因是,用户如果直接输入图片地址的话,linkFrom为null 
  32.          */  
  33.         if(linkFrom != null && !linkFrom.contains(request.getServerName())){  
  34.             System.out.println("盗链来自: "+linkFrom);  
  35.             request.getRequestDispatcher("/images/logo_red.jpg").forward(request, response);  
  36.         }else {  
  37.             filterchain.doFilter(request, response);  
  38.         }  
  39.     }  
  40.   
  41.     @Override  
  42.     public void destroy() {  
  43.         // TODO Auto-generated method stub  
  44.           
  45.     }  
  46.   
  47.     @Override  
  48.     public void init(FilterConfig filterconfig) throws ServletException {  
  49.         // TODO Auto-generated method stub  
  50.           
  51.     }  
  52.   
  53. }  



3. 测试  

图片所在的是localhost1:1111,现在我用localhost1和localhost2去请求,ok的话,前者能显示,后者显示logo 

body部分:这里我放了两个图片,前面一个是/images目录下的,不做防盗链,后面的做防盗链 
Html代码   收藏代码
  1. <img src="http://localhost1:1111/images/bq_bgGreen.jpg">  
  2. <img src="http://localhost1:1111/userfile/20100405/7ef5d05bacd840e8beb8147653ad2906_81_81.jpg" />  



 

 

OK,这就达到咱们的目的了 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值