轉至做個圖片防盜鏈
目的是,網站本身的圖片不防盜鏈,用戶上傳的圖片不許外鏈
用戶上傳的圖片都在userfile目錄和其子目錄下面
1. 配置filter
- <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
- 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 [email protected]
- */
- 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目錄下的,不做防盜鏈,後面的做防盜鏈
- <img src="http://localhost1:1111/images/bq_bgGreen.jpg">
- <img src="http://localhost1:1111/userfile/20100405/7ef5d05bacd840e8beb8147653ad2906_81_81.jpg" />
OK,這就達到咱們的目的了