众所周知,在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. leaflet实用插件整理

    leaflet实用插件整理: https://www.giserdqy.com/webgis/leaflet/4920/leaflet%E5%AE%9E%E7%94%A8%E6%8F%92%E4%BB ...

  2. 组件式开发(Vue)

    什么是组件式开发: 组件式开发就是将单个组件组合起来,形成一个大的组件进行页面的开发完成 什么是复合型组件: 复合型组件就是将相同的功能写成一个公用的组件(单元组件),供其他组件使用,就类似于后台开发 ...

  3. jquery对复选框(checkbox)的操作(精华)

    @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport" ...

  4. Git换行符是如何精确控制的

    Git换行符是如何精确控制的 Checkout Windows-style, commit Unix-style Git will convert LF to CRLF when checking o ...

  5. 无需激活直接同步登入discuz,php代码(直接可用)

    <?php /** * 抽奖 * @param int $total */ function getReward($total=1000) { $win1 = floor((0.12*$tota ...

  6. 基于Groovy+HttpRestful的超轻量级的接口测试用例配置的设计方案及DEMO实现

    目标 设计一个轻量级测试用例框架,接口测试编写者只需要编写测试用例相关的内容(入参及结果校验),不需要理会系统的实现,不需要写跟测试校验无关的内容. 思路 测试用例分析 一个用例由以下部分组成: (1 ...

  7. jmeter获取mysql数据并作为请求参数使用

    1.将mysql-connector-java-5.1.22-bin.jar包放到jmeter的lib目录下,重启jmeter 2.测试计划中添加jdbc connection,右键测试计划----添 ...

  8. Linux 安装vsftpd和ftp客户端

    1.下载安装包:ftp-0.17-54.el6.x86_64.zip和vsftpd-2.2.2-11.el6_4.1.x86_64.zip 可以直接在Linux底下用yum install vsftp ...

  9. JAVA值传递之基本数据类型和引用数据类型

    #1.基本数据类型值传递 package 经典小Demo.值传递; public class Test { public static void main(String[] args) { int a ...

  10. mysql-5.7.17-winx64压缩版的安装包下载和安装配置

    网上有很多的安装配置步骤,但是一个跟一个遇到的问题不一样,总之越是写的完整的人,遇到的错误越多,在安装过程中也就越悲催!第一步:下载mysql安装包---下载网址https://downloads.m ...