1. 程式人生 > >SpringMvc文件資源防止被外鏈鏈接

SpringMvc文件資源防止被外鏈鏈接

http != spring position tco load pub erer auto


@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文件資源防止被外鏈鏈接