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)的方式,就可达到过滤非法请求的目的。

原文地址:https://www.cnblogs.com/chx9832/p/12259409.html