全国咨询/投诉热线:400-618-4000

Java培训之防盗链

更新时间:2016年07月29日18时19分 来源:传智播客Java培训学院 浏览次数:

浏览器向服务器发送请求,可能是直接在浏览器地址栏中输入URL地址进行访问,也可能是点击一个网页上的超链接而发出。对于第一种情况,浏览器不会发送Referer请求头,而对于第二种情况,浏览器会使用Referer请求头字段来标识请求的超链接所在网页的URL。如下所示:
Referer: http://localhost:8080/Example07/
所谓的防盗链其实是Referer请求头的一个很重要的功能,在防盗链及Content-Type解读文档中,对于什么是防盗链有了详细的解释。今天,我们要学习的是如何通过request对象的相关方法实现防盗链功能。

1.防盗链案例练习

下面的防盗链练习是在Servlet中判断请求的来源,即referer请求头的值是否包含”localhost”,如果不包含或referer的值为null,则重定向到百度首页,否则在控制台上打印“hello“。具体如下所示:
(1)创建一个web应用,Example08,在该应用下创建一个Servlet类,RefererServlet,主要代码如例1-1所示:
例1-1 RefererServlet.java
public class RefererServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
       /**
        * 使用Referer请求头,来防盗链
        */
       String referer = request.getHeader("Referer");
       System.out.println(referer);
       if(referer == null || !referer.contains("localhost")) {
           response.sendRedirect("http://www.baidu.com");
       } else {
           System.out.println("hello!");
       }
    }
}
(2)RefererServlet在web.xml文件中,其访问路径的配置为:“/RefererServlet”。
(3)将Example08发布到Tomcat服务器中,然后启动Tomcat服务器,在浏览器地址栏上输入:http://localhost:8080/Example08/RefererServlet,效果如图1-1所示:
图1-1 浏览器显示结果
访问RefererServlet后跳转到百度首页,并且控制台上打印“null”,表明在地址栏上直接访问资源,该请求头的值为空。
(4)在Example08应用中新建一个test.html,主要代码如例1-2所示:
例1-2 test.html
<body>
<a href="/Example08/RefererServlet">去RefererServlet</a>
</body>
(5)重新启动Tomcat服务器,在浏览器端访问test.html,如图1-2所示:
图1-2 浏览器显示结果
(6)点击图1-2所示的超链接“去RefererServlet”,控制台打印结果如图1-3所示:
图1-3 控制台打印结果
图1-3中打印的Referer请求头的值正是访问RefererServlet的请求来源test.html的访问路径,其中包含“localhost”,所以“hello”也会被打印在控制台中。
有了Referer请求头,我们就可以根据它的值来判断访问来源是否是从本站发出,也可以通过它来做一些统计工作。
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee