Jeecg,登录才能下载文件
本文针对Jeecg 3.8.2版本其他版本也基本通用可参考调整。1 背景上传到系统的文件可能会要求登录状态才能下载或者下载时须记录日志用于查看哪个用户什么时间下载了什么文件。但是系统默认的文件是上传到静态资源目录的即使前端页面看不到只要有链接就能下载。2 限权文件2.1 后端2.1.1 配置权限ShiroConfig.java文件中做如下修改Bean(shiroFilterFactoryBean) public ShiroFilterFactorBean shiroFilter(SecurityManager securityManager) { ... // 将“anon”改为“jwt” filterChainDefinitionMap.put(/sys/common/static/**, jwt); ... }2.1.2 返回文件内容CommonController.java文件修改如下GetMapping(value /static/**) public void view(HttpServletRequest request, HttpServletResponse response) { ... try { ... outputStream response.getOutputStream(); // Img目录下的不必鉴权 if (!imgPath.startsWith(Img/) !imgPath.startsWith(/Img/)) { // 登录用户才能下载 LoginUser loginUser (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (loginUser null) { OutputStreamWriter writer new OutputStreamWriter(outputStream, UTF-8); BufferedWriter bufferedWriter new BufferedWriter(writer); bufferedWriter.write(未登录无法下载); response.setStatus(403); try { outputStream.close(); } catch (IOException e) { log.error(e.getMessage(), e); } return; } } ... } ... }2.2 前端window.open(url)改为downloadFileWithToken(url)即可。import { getToken } from //utils/auth; function downloadFileWithToken(url) { fetch(url, { method: GET, headers: { X-Access-Token: getToken(), } }).then(response { if (!response.ok) { throw new Error(response.statusText) } return response.blob(); }).then(blob { { // 将请求到的内容直接保存为文件 const blobUrl window.URL.createObjectURL(blob); const link document.createElement(a); link.href blobUrl; link.download url.indexOf(/) -1 ? url.split(/)[url.split(/).length - 1] : url; link.style.display none; document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(blobUrl); } }).catch(error { //createMessage.warning(error.message) }) }3 不限权文件用户头像等不想限制权限时另外配置即可。3.1 后端3.1.1 配置权限ShiroConfig.java文件中做如下修改Bean(shiroFilterFactoryBean) public ShiroFilterFactorBean shiroFilter(SecurityManager securityManager) { ... // 增加 filterChainDefinitionMap.put(/sys/common/static/Img/**, anno); // 将“anon”改为“jwt” filterChainDefinitionMap.put(/sys/common/static/**, jwt); ... }3.1.2 返回文件内容如2.1.2所示。3.2 前端upload.ts文件修改如下... export function uploadImg(params: UploadFileParams, onUploadProgress: (progressEvent: ProgressEvent) void) { // ----begin----上传到指定目录 if (params.data) { params.data { ...params.data, biz: Img } } else { params.data { biz: Img } } // ----end----上传到指定目录 return defHttp.uploadFileUploadApiResult( { url: /sys/common/upload, // 原先代码有误 onUploadProgress, }, params, { isReturnResponse: true } ); } ...
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2408685.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!