Java代码手段防止非法请求,思路如下:
        1. 获取到当前请求的域名,如www.a.com
        2. 获取到请求资源的上一个地址
        3. 判断上一个地址是否为空,如果为空代表的是直接访问的资源,非法
         还有一种情况就是B项目访问时上一个地址www.b.com/xxx 不是资源所在地址,非法
         新建一个过滤器,实现逻辑,如果非法则显示图像,拦截return   ,否则放行

过滤器:

 package com.chx;

 import java.io.IOException;

 import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ImageFilter implements Filter{ @Override
public void destroy() {
System.out.println("销毁");
} @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("dofilter");
//转换成HttpServlet对象
HttpServletRequest httprequest=(HttpServletRequest)request;
HttpServletResponse httpresponse=(HttpServletResponse)response; //获取上一个地址
String referer = httprequest.getHeader("Referer");
String serverName = httprequest.getServerName();
System.out.println(referer+"\t"+serverName);
//如果地址为空,则有可能是直接访问资源
//地址不正确,则是非法访问请求
if(referer==null||!referer.contains(serverName)) {
//转发到非法提示
request.getRequestDispatcher("/img/ffqq.png").forward(request, response);
return;
} //资源放行
chain.doFilter(request, response); } @Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("初始化");
} }

web.xml

 <!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name>
<filter>
<filter-name>imgFilter</filter-name>
<!--指向自己配置的过滤器类-->
<filter-class>com.chx.ImageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>imgFilter</filter-name>
<!--过滤img文件夹下的所有文件-->
<url-pattern>/img/*</url-pattern>
</filter-mapping>
</web-app>

执行结果

1.正常访问——在本项目中通过请求访问资源

 2.非法访问——直接访问资源地址

 3.非法访问——通过其他项目访问本项目资源

通过这种判断上一个请求地址(Referer)的方式,就可达到过滤非法请求的目的。

最新文章

  1. (转)SVN服务器搭建和使用(二)
  2. SQL疑难问题
  3. web初学之MVC
  4. Monotype推出基于HTML5的Web字体平台
  5. HTML5存储
  6. int main(int argc, char * argv[]) 里的异常处理
  7. HDU2196 Computer(树形DP)
  8. MYSQL数据导入导出
  9. ANDROID_MARS学习笔记_S01_011ProgressBar
  10. [转]python变量作用域的有趣差别
  11. BZOJ 3512: DZY Loves Math IV [杜教筛]
  12. maven坐标的获取
  13. django中的中间件
  14. 1018 Public Bike Management
  15. 32. 安装oracle11g时,先决条件一直失败的解决方法
  16. ios-Objective-C中的各种遍历(迭代)方式(转载)
  17. CTF内存高级利用技术
  18. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
  19. JSON的多样格式
  20. WTL教程

热门文章

  1. go实现java虚拟机02
  2. Android布局管理器-从实例入手学习相对布局管理器的使用
  3. hadoop3自学入门笔记(1)——虚拟机安装和网络配置
  4. PVE裸机虚拟化环境安装之后的一些部署记录
  5. 优酷爱奇艺视频转换为MP4格式工具
  6. SSM开发健康信息管理系统
  7. 一起学Vue之事件处理
  8. Gerrit评审代码流程注意事项
  9. Secondary NameNode:它究竟有什么作用?
  10. navicat连接mysql出现2059错误的解决方法