关于防盗链有两种写法:
代码一:referer.contains();------我觉得该方法不是十分规范,因为只要包含对应的关键信息就行,但它并不是以什么信息为开头。
代码二: referer.startsWith();------我觉得该方法比较规范,验证以什么为开头的。第二种方式的话,还要考虑https的链接,二级域名等其它不同的url。
额外补充:
!=null不是多此一举,这是一种编程习惯,在使用某对象的方法前,进行非空判断,避免出现低级错误空指针异常~
代码一(部分):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String referer =request.getHeader("referer");//获取包含referer指定的头字段
String servername = request.getServerName();//获取服务器名称
if(referer!=null&&referer.contains(servername)){
response.getWriter().print("downlaod...");
}else{
response.sendRedirect("/ch04_1/download.html");
}
}
代码二(部分):
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out =response.getWriter();
// 获取referer头的值
String referer = request.getHeader("referer");
// 获取访问地址
String sitePart = "http://" request.getServerName();
out.println("getServerName():" sitePart);
// 判断referer头是否为空,这个头的首地址是否以sitePart开始
if(referer!=null && referer.startsWith(sitePart)){
// 处理正在下载的请求
out.println("dealing download...");
}else{
// 非法下载请求跳转到download.html页面
RequestDispatcher rd =request.getRequestDispatcher("/download.html");
rd.forward(request, response);
}
}
---------------------
作者:ITCBL
来源:CSDN
原文:https://blog.csdn.net/STUDENTstudent123/article/details/83956481