众所周知,在webapi中,如果有个接口需要权限,一般会将带权限的字段塞进header中。但是,在带权限的文档下载接口中,无论是用post,还是get方式,我们无法设置header头信息。苦恼呀?别急,接下来我们慢慢拆解并分析步骤。

带权限的文档下载接口一般分为3个步骤:

1、验证权限;

2、查找数据并生成文档或文档流;

3、将文档写入response的流中并返回到客户端。

第一个步骤,我们就不详谈了,可以使用验证权限的中间件,例如identity4,去做权限验证的功能。

关键在于第二和第三个步骤。

我们可以将第二个步骤和第三个步骤在接口中分开,分为两个接口来完成一个文档的下载功能。

第二个步骤的详细方法如下:

1、前端使用post方式,将需要下载的参数传到后端,并将带权限的字段塞进header中;

2、后端收到消息后,首先判断权限,即当前用户是否有权限下载该文档或数据;

3、权限验证不通过,则返回错误到前端;

4、权限验证通过后,则查询数据并生成文档到磁盘中。如果是直接下载文档,则可以省略这一步;;

5、获取文档的文件名称和当前的时间等参数,通过一个密钥进行对称加密,并将加密后的字符串返回到前端。

解惑第二个步骤中的方法:

1、使用Post方式传输,并设置header头信息;

2、为何需要将当前时间也一起加密呢?我们可以通过该时间来判断url是否过期。过期时间可以自定义,一般设置为30秒到120秒之间。

3、被加密的文件名称可以是相对路径,也可以是一个不带路径的文件名称,这样可以隐藏文件的真实路径。当我们需要在后端用到该文件时,才给其加上绝对路径。

第三个步骤的详细方法如下:

1、前端将第二个步骤的返回的加密字符串通过post或者get方式传到后端;

2、后端通过密钥解析后得到文件名和一个时间;

3、通过当前时间减去解密后得到的时间,判断当前加密串是否过期;

4、如果已过期,则返回错误信息到前端;

5、如果未过期,则加载文档流,并返回到前端。

通过以上方法,我们在webapi中就实现了带权限的文档下载操作。

.net core webapi带权限的文件下载方法的更多相关文章

  1. .net core WebAPI 初探及连接MySQL

    1. 前言 笔者最近跟着微软官方文档学习.net core WebAPI,但发现其对 WebAPI 连接数据库.读取数据库方面讲得不够细致明了.写此文的目的,即实现 .net core WebAPI ...

  2. net core WebApi——April.Util更新之权限

    目录 前言 权限 中间层 小结 前言 在之前已经提到过,公用类库Util已经开源,目的一是为了简化开发的工作量,毕竟有些常规的功能类库重复率还是挺高的,二是为了一起探讨学习软件开发,用的人越多问题也就 ...

  3. SAAS云平台搭建札记: (三) AntDesign + .Net Core WebAPI权限控制、动态菜单的生成

    我们知道,当下最火的前端框架,非蚂蚁金服的AntDesign莫属,这个框架不仅在国内非常有名,在国外GitHub上React前端框架也排名第一.而且这个框架涵盖了React.Vue.Angular等多 ...

  4. .NET压缩图片保存 .NET CORE WebApi Post跨域提交 C# Debug和release判断用法 tofixed方法 四舍五入 (function($){})(jQuery); 使用VUE+iView+.Net Core上传图片

    .NET压缩图片保存   需求: 需要将用户后买的图片批量下载打包压缩,并且分不同的文件夹(因:购买了多个用户的图片情况) 文章中用到了一个第三方的类库,Nuget下载 SharpZipLib 目前用 ...

  5. vue.js - axios Get、Post方法传参给 .net core webapi。

    一:axios中是 Get请求: 1:在vue项目中通过params属性携带数据: let _self = this; axios({ method:'get', url:'http://localh ...

  6. ASP.NET CORE WEBAPI文件下载

    ASP.NET CORE WEBAPI文件下载 最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1.考虑如下场景: 文件是程序生成的. 文件应该能兼容各种格 ...

  7. Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)

    前言: 前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时, 有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子. 我一不小心回了句:等回广州我再写篇文章 ...

  8. 零基础ASP.NET Core WebAPI团队协作开发

    零基础ASP.NET Core WebAPI团队协作开发 相信大家对“前后端分离”和“微服务”这两个词应该是耳熟能详了.网上也有很多介绍这方面的文章,写的都很好.我这里提这个是因为接下来我要分享的内容 ...

  9. Asp.net core WebApi 使用Swagger生成帮助页

    最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效 ...

随机推荐

  1. python列表常用内建方法

    python列表常用内建方法: abc = ['a',1,3,'a'] #abc.pop(1) #删除索引1的值.结果['a', 3] #abc.append([123]) #结果:['a', 1, ...

  2. to_date

    SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; 会话已更改. SQL> SELECT TO_DATE(' ...

  3. java之连接数据库之JDBC访问数据库的基本操作

    1.将数据库的JDBC驱动加载到classpath中,在基于JavaEE的web应用实际开发过程中通常要把目标数据库产品的JDBC驱动复制到WEB—INF/lib下. 2.加载JDBC驱动并将其注册到 ...

  4. spring boot 配置多数据源

    https://www.jianshu.com/p/b2e53a2521fc

  5. mongodb 安装遇到问题:the domain,user name and/or password are incorrect.remember to use"." for the domain if the account is on the local machine

    安装mongoDB遇到如下问题:the domain,user name  and/or password are incorrect.remember to use"." for ...

  6. MySQL数据排序asc、desc

    数据排序 asc.desc1.单一字段排序order by 字段名称 作用: 通过哪个或哪些字段进行排序 含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多 ...

  7. python split()函数的用法

    转自: https://blog.csdn.net/orangefly0214/article/details/80810449 函数:split() Python中有split()和os.path. ...

  8. 隐藏非选中的checkBox

    //隐藏非选中的checkBox function onlyCheckBox(){ $("#dtlTable tr:gt(0)").each(function(i) { var c ...

  9. Docker Kubernetes 创建管理 Deployment

    Docker Kubernetes YAML文件创建容器 通过创建Deployment来管理pods从而创建容器.它会同时创建容器.pod.以及Deployment ! 环境: 系统:Centos 7 ...

  10. JS设计模式(10)职责链模式(重要)

    什么是职责链模式? 重要性:4 星,在项目中能对 if-else 语句进行优化 定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到 ...