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+"\t"+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)的方式,就可達到過濾非法請求的目的。