众所周知,在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. centos----------centos下安装谷歌浏览器

    1.首先你已经安装了带有可视化界面的centos系统. 2.打开里面自带的一个浏览器,输入网址 http://chrome.richardlloyd.org.uk/install_chrome.sh ...

  2. visual studio code常用插件

    1.auto close tag2.chinese language pack for visual studio code3.debugger for chrome4.docker5.html cs ...

  3. Linux安装 centos 7 最小化 安装

    我用的是vmware 15 ,我将用图片的形式带领大家安装,没有说到的地方为默认选项    最好把文件放到一个单独的文件夹中    简单密码点击两次DONE 即可,虚拟机密码不必那么复杂,工作环境请设 ...

  4. Windows磁盘映射读写远程主机文件

    执行CMD命令做磁盘映射:net use X: \\172.17.0.1\D$\test Password /USER:Administrator Java调用CMD String cmd = &qu ...

  5. 【awk】提取文件第一列

    生信数据文件一般是按列分开的,如果我们只想简单的提取一列而不是费尽周折写个程序提取哪一列的话,awk作为一个非常好用的文档处理工具,我们现在来简单看一下他的一些功能: awk '{print $1}' ...

  6. 【BCFTOOLS】按样本拆分VCF文件

    在对vcf的操作有这样三个软件: Vcftools:主要用于群体分析,文本处理的功能不是很强大,虽然这个软件也可以拆分样本,但是这种拆分不涉及文件的处理,只是保留在分析流程里. GATK .x:这个软 ...

  7. 51Nod 1185 威佐夫游戏 V2

    有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...

  8. Python新手入门英文词汇(1-1)

    英文词汇总结一.交互式环境与print输出 1.print:打印/输出2.coding:编码3.syntax:语法4.error:错误5.invalid:无效6.identifier:名称/标识符7. ...

  9. ubuntu16.04安装wordpress

    ubuntu16.04安装wordpress和centos7安装wordpress存在一定的差异. 当然共性大于差异. 共性是lamp环境. wordpress的必备环境. 先共性再差异. 一.搭建l ...

  10. ant_任务的含义与使用

    任务是一段可执行的代码.任务可以具有多个属性,每个任务都具有共同的结构.任务常见结构由名称,属性等组成. 任务配置结构示例: <task-name attribute1 = "valu ...