Java代码手段防止非法请求——防盗链
生活随笔
收集整理的這篇文章主要介紹了
Java代码手段防止非法请求——防盗链
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java代碼手段防止非法請求,思路如下:
1. 獲取到當前請求的域名,如www.a.com
2. 獲取到請求資源的上一個地址
3. 判斷上一個地址是否為空,如果為空代表的是直接訪問的資源,非法
還有一種情況就是B項目訪問時上一個地址www.b.com/xxx 不是資源所在地址,非法
新建一個過濾器,實現邏輯,如果非法則顯示圖像,攔截return ,否則放行
過濾器:
1 package com.chx;
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.annotation.WebFilter;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 public class ImageFilter implements Filter{
16
17 @Override
18 public void destroy() {
19 System.out.println("銷毀");
20 }
21
22 @Override
23 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
24 throws IOException, ServletException {
25 System.out.println("dofilter");
26 //轉換成HttpServlet對象
27 HttpServletRequest httprequest=(HttpServletRequest)request;
28 HttpServletResponse httpresponse=(HttpServletResponse)response;
29
30 //獲取上一個地址
31 String referer = httprequest.getHeader("Referer");
32 String serverName = httprequest.getServerName();
33 System.out.println(referer+" "+serverName);
34 //如果地址為空,則有可能是直接訪問資源
35 //地址不正確,則是非法訪問請求
36 if(referer==null||!referer.contains(serverName)) {
37 //轉發到非法提示
38 request.getRequestDispatcher("/img/ffqq.png").forward(request, response);
39 return;
40 }
41
42 //資源放行
43 chain.doFilter(request, response);
44
45 }
46
47 @Override
48 public void init(FilterConfig arg0) throws ServletException {
49 System.out.println("初始化");
50 }
51
52 }
web.xml
1 <!DOCTYPE web-app PUBLIC 2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 3 "http://java.sun.com/dtd/web-app_2_3.dtd" > 4 5 <web-app> 6 <display-name>Archetype Created Web Application</display-name> 7 <filter> 8 <filter-name>imgFilter</filter-name> 9 <!--指向自己配置的過濾器類--> 10 <filter-class>com.chx.ImageFilter</filter-class> 11 </filter> 12 <filter-mapping> 13 <filter-name>imgFilter</filter-name> 14 <!--過濾img文件夾下的所有文件--> 15 <url-pattern>/img/*</url-pattern> 16 </filter-mapping> 17 </web-app>
執行結果
1.正常訪問——在本項目中通過請求訪問資源
2.非法訪問——直接訪問資源地址
3.非法訪問——通過其他項目訪問本項目資源
通過這種判斷上一個請求地址(Referer)的方式,就可達到過濾非法請求的目的。
總結
以上是生活随笔為你收集整理的Java代码手段防止非法请求——防盗链的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript关闭窗口的代码怎么写
- 下一篇: 0013 COREAPI自动生成接口文档