关于防盗链两种写法:referer.contain与referer.startsWith

发布单位: 发布人:张鑫鑫 发布时间:2019/5/3 7:16:49 关注度:470
关于防盗链有两种写法:
代码一: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