Nginx、Springmvc实现下载文件访问控制
2017-01-08 00:38
323 查看
Nginx利用X-sendfile结合Springmvc实现文件下载的访问控制(权限、积分、次数等)
1. 访问控制流程
请求下载地址:http://localhost/xxx-xxx/app/xxxx/4eecd20d9bdd45e9a6283105eb54fa0d4eecd20d9bdd45e9a6283105eb54f : 请求文件的标识号,也可以放在header中。
xxx-xxx/app/xxxx : 为Springmvc请求地址
前端使用nginx进行监听,获取当前请求地址转发至web服务器。
应用服务器进行业务逻辑处理
设置setHeader -> X-Accel-Redirect
Nginx获取“X-Accel-Redirect”后以sendfile方式从NFS读取文件并进行下载
2. Spring Mvc代码
@RequestMapping(value = "/offline/{id}",method = RequestMethod.GET) public void doDownloadOffline(@PathVariable("id") String offlineId, HttpServletResponse response) throws IOException { File zipFile = appCommonServiceImpl.selectOfflinePackageById(offlineId); if (zipFile == null || !zipFile.exists()) { response.sendError(404); } response.setHeader("Content-Type", "application/octet-stream"); //设置转发属性 // /appoffline/为Nginx location 名 response.setHeader("X-Accel-Redirect", "/appoffline/" + zipFile.getName()); response.setHeader("X-Accel-Charset", "utf-8"); response.setHeader("Content-Disposition", "attachment; filename=" + zipFile.getName()); }
3. nginx.conf
location /app-all { #root html; #index index.html index.htm; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://127.0.0.1:8080/app-all; } #设置文件存放path location /appoffline/ { #设置非浏览器访问 internal; charset utf-8; alias /app/offline/; }
Nginx 403 forbidden 问题
权限问题(主要为权限问题):在nginx.conf 里加入 user root 或者所属的能读取文件权限的用户;
目录不存在
如有疑问请加公众号(K171),如果觉得对您有帮助请 github start
相关文章推荐
- springmvc实现图片下载和在浏览器显示以及nginx代理访问图片
- 实现IHttpHandler接口来控制文件下载权限
- 实现IHttpHandler接口来控制文件下载权限
- 基于MogileFS+mysql+nginx实现分布文件存储与访问 推荐
- nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下)
- springmvc实现文件上传下载
- 利用Nginx的X-Accel-Redirect头实现下载控制(附带php和rails实例)
- qeephp 修改acl.yaml文件实现访问控制
- CentOS6.5 Nginx搭建web服务器,实现平滑升级,虚拟主机及访问控制
- SpringMVC3.1.1+Spring3.1.1+Hibernate4+Velocity+EasyUI+ZTree实现RBAC基于角色的访问控制(一)
- Enterprise Solution 生成实体数据访问接口与实现类型 Code Smith 6.5 模板文件下载
- [WMI实例]实现文件系统管理功能封装。提供共享文件和文件系统访问权限控制能力
- 用定制标签库和配置文件实现对JSP页面元素的访问控制
- SpringMVC3.1.1+Spring3.1.1+Hibernate4+Velocity+EasyUI+ZTree实现RBAC基于角色的访问控制(二)
- qeephp 修改acl.yaml文件实现访问控制
- [Nginx]用Nginx实现与应用结合的访问控制 - 防盗链
- 用定制标签库和配置文件实现对JSP页面元素的访问控制
- Servlet实现控制文件下载速度
- Nginx列出目录和文件并用密码控制访问权限配置方法
- rails+nginx实现高效率文件下载