在开发过程中,有人经常会用referer头字段,有些网站为增加人气,提高网站访问量,提供各种各样的下载界面,但是他们本身没有资源,只是讲超链接指向特定站点资源。真正有资源的站点为了防止“盗链”,需要检查请求资源,如果是本站的下载请求,则允许正常下载,如果是其他站点,则跳转到其他特定网页。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class referer extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public referer() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
response.setContentType("text/html;charset=utf-8"); //解决中文乱码问题
PrintWriter out=response.getWriter();
String referer=request.getHeader("referer"); //获取referer请求头的值
String sitePart="http://"+request.getServerName(); //获取访问地址
if(referer!=null&&referer.startsWith(sitePart)){
out.println("dealing download……");} //处理请求
else
{ //非法下载跳转到download.html网页
RequestDispatcher rd=request.getRequestDispatcher("/download.html");
rd.forward(request,response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}