1.防盗链的基本原理就是就是一句话:通过判断request请求头的refer是否来源于本站。
2.HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置编码 response.setContentType("text:html;charset=utf-8"); //下载功能,并实现防盗链 String referer = request.getHeader("Referer"); //获取Referer上的链接信息 //判断连接是否为空或者是以自己项目名开头 if(referer == null || !referer.startsWith("http://localhost:8080/day1111")){ response.sendRedirect("/day1111/error.html"); return; //阻止代码往下运行 } //下载功能实现 String temp = request.getParameter("filename"); String filename = URLEncoder.encode(temp, "utf-8"); //避免页面显示文件名乱码问题 response.setHeader("content-disposition", "attachment;filename="+filename); //获取当前的真实物理路径(在服务器上的路径) String realPath = getServletContext().getRealPath("images/"+temp); //文件输入流 FileInputStream fis = new FileInputStream(realPath); //文件输出流 OutputStream os =response.getOutputStream(); //缓冲数组 byte[] buffer = new byte[1024]; int len = 0; while((len=fis.read(buffer))>0){ os.write(buffer, 0, len); } os.close(); fis.close(); }
注意点:getServletContext().getRealPath("images/"+temp); 该路径是对应在项目WebContent下要下载的文件资源路径
时间: 2024-10-11 10:53:41