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

  • 相关阅读:
    shell关闭指定进程
    linux tricks 之数据对齐。
    linux tricks 之VA系列函数.
    linux tricks 之 typeof用法.
    linux下notify机制(仅用于内核模块之间的通信)
    怎么判定一个mac地址是multicast还是unicast.
    linux tricks 之 ALIGN解析.
    fid解释
    c语言中宏定义#和 ##的作用:
    rebtree学习
  • 原文地址:https://www.cnblogs.com/chx9832/p/12259409.html
Copyright © 2020-2023  润新知