码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMvc文件资源防止被外链链接

时间:2017-09-04 17:50:01      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:for   numbers   servlet   pat   puts   rate   name   false   print   


@RequestHeader String referer // 这个就是获取头部信息由这个来获取自己的头部信息

如果这个头部信息含有自己的域名则说明这个资源是自己的网站中的,否则则不让他进行下载


/**
     * 文件下载防止文件被别的网站引用
     * 直接访问会访问不了
     * @Description:
     * @param type
     *            文件后缀名
     * @param fileName
     *            文件名
     * @param request
     * @param response
     * @param referer
     *            转发头部里面只有包含您的域名才给资源
     * @return
     */
    // @RequestMapping(value="/downloadBySelf/{fileName}/{type}",method=RequestMethod.GET)
    @RequestMapping(value = "/downloadBySelf/{fileName}/{type}", method = RequestMethod.GET)
    public String downloadFileByself(@PathVariable("type") String type,
            @PathVariable("fileName") String fileName,
            HttpServletRequest request, HttpServletResponse response,
            @RequestHeader String referer // 这个就是获取头部信息
    ) {
        log.info(referer);
        if (referer != null) {//这里可以设置自己的域名
//        if(null!=referer&&referer.contains("?"))
            if (fileName != null) {
                String realPath = request.getServletContext().getRealPath(
                        "WEB-INF/File/");
                File file = new File(realPath, fileName + "." + type);
                if (file.exists()) {
                    response.setContentType("application/force-download");// 设置强制下载不打开
                    response.addHeader("Content-Disposition",
                            "attachment;fileName=" + fileName + "." + type);// 设置文件名
                    byte[] buffer = new byte[1024];
                    FileInputStream fis = null;
                    BufferedInputStream bis = null;
                    try {
                        fis = new FileInputStream(file);
                        bis = new BufferedInputStream(fis);
                        OutputStream os = response.getOutputStream();
                        int i = bis.read(buffer);
                        while (i != -1) {
                            os.write(buffer, 0, i);
                            i = bis.read(buffer);
                        }
                    } catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                    } finally {
                        if (bis != null) {
                            try {
                                bis.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                        if (fis != null) {
                            try {
                                fis.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
        return null;
    }

SpringMvc文件资源防止被外链链接

标签:for   numbers   servlet   pat   puts   rate   name   false   print   

原文地址:http://www.cnblogs.com/anstoner/p/7474417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!