防盗链[referer]

原文出处:http://www.cnblogs.com/devilfree/archive/2012/09/11/2680914.html
html

总结一下今天学习防盗链Filter的一些知识点:java


    防盗链要实现的是这样一种效果:好比说其余的网站引用本网站的图片资源,将会显示一个错误图片,只有是本网站内的网页引用时候,图片才能够正常显示。这种应该是比较常见的,例如常常逛论坛的人会看到别人贴的图显示出来是一个错误图片,如百度图片不能够外链等,用到的就是这个Filter。

    首先说下Filter的工做区域是在客户端请求request抵达Servlet以前和服务器响应response在从Servlet抵达客户端浏览器以前。即FilterChain起到了一个过滤网的做用。因此在显示图片以前,先来验证图片的来源,再决定要不要正常显示该图片。浏览器


    那么如何断定图片的来源呢?这里涉及到了一个知识点:referer
    什么是referer呢?HTTP协议可能学网络的人更熟悉一点,HTTP headers是HTTP请求和相应的核心模块,它承载了关于客户端浏览器、请求页面、服务器等相关信息。Referer是HTTP头中的一个属性,告诉服务器我是从哪一个页面连接过来的,好比说若是我博客上面有友情连接到朋友的博客,那么就能够从referer中统计出来一段时间内有多少点击量是从个人博客连接到朋友的博客。服务器


Java中获取referer的方法是:request.getHeader("referer")
判断盗链:网络

String referer = request.getHeader("referer");
  
  //getServerName() 返回网站的域名
  if(referer==null || !referer.contains(request.getServerName())){
    //转到一个错误的图片
    request.getRequestDispatcher("/error.gif").forward(request.response);
  }else{
    chain.doFilter(request,response);
  }


 

request.getHeader("referer")可用的状况:
1.<a href="">
2.表单提交

不可用的状况:
1.从收藏夹连接
2.自定义地址
3.浏览器直接输入
...jsp


下面是一个对referer和getServerName()的小测试学习

新建两个jsp页面,分别命名为srcFilter.jsp 和 testFilter.jsp测试

srcFilter作一个连接到testFilter.jsp,显示testFilter页面的referer和serverName网站

srcFilter:spa

1 <a href="testFilter.jsp">点击</a>

 

testFilter:

1 <%
2   String referer = request.getHeader("referer");
3   String serverName = request.getServerName();
4 %>
5  <div>serverName : <%=serverName %></div>
6  <div>referer : <%=referer %></div>

 

点击连接后跳转到testFilter页面显示结果为:

serverName : localhost
referer : http://localhost:8080/filter/srcFilter.jsp
相关文章
相关标签/搜索