做個圖片的防盜鏈

轉至做個圖片防盜鏈

目的是,網站本身的圖片不防盜鏈,用戶上傳的圖片不許外鏈 


用戶上傳的圖片都在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 [email protected] 
  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,這就達到咱們的目的了 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章