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 doFilterServletRequest 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.printlnreferer+" "+serverName); 34 //如果地址为空,则有可能是直接访问资源 35 //地址不正确,则是非法访问请求 36 ifreferer==null||!referer.containsserverName)) { 37 //转发到非法提示 38 request.getRequestDispatcher"/img/ffqq.png").forwardrequest, response); 39 return; 40 } 41 42 //资源放行 43 chain.doFilterrequest, response); 44 45 } 46 47 @Override 48 public void initFilterConfig 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)的方式,就可达到过滤非法请求的目的。