java nginx 例子_Java及nginx实现文件权限控制代码实例

我们知道,使用nginx作为文件下载服务器,可以极大地降低对后端Java服务器的负载冲击,但是nginx本身并不提供授权控制,因此好的方案是由后端服务器实现权限控制,最好的方式是直接复用应用的认证体系,最大化的降低成本。因此,可借助http的"X-Accel-Redirect"头实现该特性。具体如下:

location /bookres/ {

#禁止浏览器直接访问

internal;

limit_rate 200k;

alias d:/test/bookres/;

#转由后台处理(tomcat等web容器)

error_page 404 =200 @backend;

}

location @backend {

rewrite ^/bookres/(.*)/(.*)/(.*)/(.*)$ /bookres/?isbn=$1&restype=$2&resid=$3&type=$4 break;

proxy_pass http://localhost:8081; #tomcat等web容器

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

break;

}

java后台代码如下:

httpResponse.setHeader("Content-Disposition",

"attachment; filename=\""+filename+"\"");

httpResponse.setHeader("Content-Type",

"application/octet-stream");

httpResponse.setHeader("X-Accel-Redirect",

"/bookres/"+resource.get("res_url"));

//给nginx返回实际文件存在的地址

相比采用其他文件服务器方案如ftp/fastdfs/mongodb而言,该方案明显轻量非常多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode934. 最短的桥(dfs+bfs)

在给定的二维二进制数组 A 中,存在两座岛。(岛是由四面相连的 1 形成的一个最大组。) 现在,我们可以将 0 变为 1,以使两座岛连接起来,变成一座岛。 返回必须翻转的 0 的最小数目。(可以保证答…

谢烟客---------Linux之DNS服务系统的基础知识

DNS Domain Name Server1)C/S架构&#xff1a;SOCKET通信IP PORT2&#xff09;应用层协议&#xff1a;资源子网BIND Berkerley Information Name DomainDNS由来1&#xff09;统一名字&#xff0c;自己维护 <自己查询>解析: 基于key查找value: 查询数据库(二维关系的表: …

Java实现点击导出excel页面遮罩屏蔽,下载完成后解除遮罩

一、问题场景 最近在做数据统计功能&#xff0c;需求是导出大数据量的excel&#xff0c;时间间隔较长&#xff0c;大概需要十秒左右&#xff0c;点击导出后&#xff0c;页面没有做任何处理&#xff0c;用户也不知道是否正在导出&#xff1b;如果没有做交互上的限制&#xff0c;…

pbs 支持 java_Linux下Java安装与配置

安装以JDK1.6.0_43为例下载jdk-6u43-linux-x64.bin&#xff0c;http://www.oracle.com/technetwork/java/javase/downloads/index.html增加可执行权限 chmod x jdk-6u43-linux-x64.bin&#xff0c;执行 ./jdk-6u43-linux-x64.bin 生成目录jdk1.6.0_43拷贝到/usr/share下&#x…

使用Chatkit构建Node.js命令行聊天应用程序

by Hugo雨果 使用Chatkit构建Node.js命令行聊天应用程序 (Build a Node.js command-line chat application with Chatkit) Building chat in your app can be pretty complex. Yet, with Chatkit, implementing fully-featured chat is nothing but a few lines of code.在您的…

java 毫秒转分钟和秒_Java程序将毫秒转换为分钟和秒

Java程序将毫秒转换为分钟和秒在上面的程序中&#xff0c;您将学习如何在Java中将毫秒分别转换为分钟和秒。示例1&#xff1a;将毫秒分别转换为分钟和秒import java.util.concurrent.TimeUnit;public class Milliseconds {public static void main(String[] args) {long millis…

Andrew Ng机器学习之一 导论

监督学习与无监督学习 监督学习&#xff08;Supervised Learning) Ng的原文是&#xff1a; We gave the algorithm a data set that the "right answers" were given. 即给定了一个正确结果的集合供算法学习&#xff0c;强调了需要实现准备好正负样本喂给机器。 无监…

leetcode994. 腐烂的橘子(bfs)

在给定的网格中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;任何与腐烂的橘子&#xff08;在 4 个正方向上&#xff09;相邻的新鲜橘子都会腐烂。 返回直…

ES6对象的扩展

1.属性简写表示 2.方法简写表示 属性与方法简写&#xff1a; 3.属性名表达式 ES6允许字面量定义对象时&#xff0c;用方法二&#xff08;表达式&#xff09;作为对象的属性名&#xff0c;即把表达式放在方括号内。 4.Object.is()比较两个值是否严格相等 转载于:https://www.cnb…

Spring Cloud项目MVN编译 -- Non-resolvable import POM

最近利用闲余时间&#xff0c;打算搭建一套基于Spring Cloud G版的微服务架构(Spring boot 2.1.0)&#xff0c;一顿操作之后,IDEA也没有提示什么错误,自认为微服务搭建完毕。启动项目前&#xff0c;习惯性的Maven -clean了一下&#xff0c;我去&#xff0c;IDEA里面的Maven Pro…

datax底层原理_Datax 插件加载原理

Datax 插件加载原理插件类型Datax有好几种类型的插件&#xff0c;每个插件都有不同的作用。reader&#xff0c; 读插件。Reader就是属于这种类型的writer&#xff0c; 写插件。Writer就是属于这种类型的transformer&#xff0c; 目前还未知handler&#xff0c; 主要用于任务执行…

mysql windows身份验证_SQL Server 2005 怎么就不能用Windows身份验证方式登录呢?

SQL Server 2005 自从装到我的电脑上始终无法使用Windows身份验证的方式登录,由于使用用户名和密码登录还算顺畅,所以一直忽略了这SQL Server 2005 自从装到我的电脑上始终无法使用Windows身份验证的方式登录,由于使用用户名和密码登录还算顺畅,所以一直忽略了这个问题,直到又有…

JavaScript正则表达式快速简单的指南

Interested in learning JavaScript? Get my ebook at jshandbook.com有兴趣学习JavaScript吗&#xff1f; 在jshandbook.com上获取我的电子书 正则表达式简介 (Introduction to Regular Expressions) A regular expression (also called regex for short) is a fast way to w…

leetcode104. 二叉树的最大深度(dfs)

给定一个二叉树&#xff0c;找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例&#xff1a; 给定二叉树 [3,9,20,null,null,15,7]&#xff0c;3/ \9 20/ \15 7 返回它的最大深度 3 。代码 class Soluti…

[解读REST] 3.基于网络应用的架构

链接上文[解读REST] 2.REST用来干什么的&#xff1f;&#xff0c;上文中解释到什么是架构风格和应该以怎样的视角来理解REST&#xff08;Web的架构风格&#xff09;。本篇来介绍一组自洽的术语&#xff0c;用它来描述和解释软件架构&#xff1b;以及列举下对于基于网络的应用来…

js判断对象还是数组

1.对于Javascript 1.8.5&#xff08;ECMAScript 5&#xff09;&#xff0c;变量名字.isArray( )可以实现这个目的 var a[]; var b{}; Array.isArray(a);//true Array.isArray(b)//false 2.如果你只是用typeof来检查该变量&#xff0c;不论是array还是object&#xff0c;都将返回…

mysql 除去列名打印_sql – 使用beeline时避免在列名中打印表名

在beeline中使用hive时使用简单的select查询我想在列名中返回没有表名的表作为默认值.例数据CREATE TABLE IF NOT EXISTS employee ( eid int, name String,salary String, destination String)COMMENT Employee detailsROW FORMAT DELIMITEDFIELDS TERMINATED BY \tLINES TERM…

移动应用程序和网页应用程序_如何开发感觉像本机移动应用程序的渐进式Web应用程序...

移动应用程序和网页应用程序by Samuele Dassatti通过萨穆尔达萨蒂 如何开发感觉像本机移动应用程序的渐进式Web应用程序 (How you can develop Progressive Web Apps that feel like native mobile apps) I’m currently developing a Progressive Web App that will also ser…

leetcode1162. 地图分析(bfs)

你现在手里有一份大小为 N x N 的「地图」&#xff08;网格&#xff09; grid&#xff0c;上面的每个「区域」&#xff08;单元格&#xff09;都用 0 和 1 标记好了。其中 0 代表海洋&#xff0c;1 代表陆地&#xff0c;请你找出一个海洋区域&#xff0c;这个海洋区域到离它最近…

mysql修改root密码的方法

在 Navicat for MySQL 下面直接执行 SET PASSWORD FOR rootlocalhost PASSWORD(newpass); 就可以 方法1&#xff1a; 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR rootlocalhost PASSWORD(newpass); 方法2&#xff1a;用mysqladmin mysqladmin -u root …