`

防盗链_图片

    博客分类:
  • java
阅读更多

做个图片的防盗链

文章分类:Java编程 目的是,网站本身的图片不防盗链,用户上传的图片不许外链

用户上传的图片都在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 >   
	<filter>   
	    <filter-name>jpgServlet</filter-name>   
	    <filter-class>   
	        com.djwl.core.filter.JpgFilter
	    </filter-class> 
	</filter>
	<filter-mapping>   
	    <filter-name>jpgServlet</filter-name>   
	    <url-pattern>/userfile/*</url-pattern>   
	</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. }  
package com.djwl.core.filter;

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;

/**
 * Description: <br>
 * 2010-4-13
 * @author huxiao kskr@qq.com
 */
public class JpgFilter implements Filter {

	@Override
	public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)servletrequest;
		HttpServletResponse response = (HttpServletResponse)servletresponse;

		//获取请求来源
		String linkFrom = request.getHeader("referer");
		
		/**
		 * 如果不是从本网站链接,则返回本网站的logo,否则正常走
		 * 注意:这里的linkFrom为null的话也正常走。原因是,用户如果直接输入图片地址的话,linkFrom为null
		 */
		if(linkFrom != null && !linkFrom.contains(request.getServerName())){
			System.out.println("盗链来自: "+linkFrom);
			request.getRequestDispatcher("/images/logo_red.jpg").forward(request, response);
		}else {
			filterchain.doFilter(request, response);
		}
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void init(FilterConfig filterconfig) throws ServletException {
		// TODO Auto-generated method stub
		
	}

}





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"   />   
<img src="http://localhost1:1111/images/bq_bgGreen.jpg">
<img src="http://localhost1:1111/userfile/20100405/7ef5d05bacd840e8beb8147653ad2906_81_81.jpg" />








OK,这就达到咱们的目的了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics