zoukankan      html  css  js  c++  java
  • .net core webapi带权限的文件下载方法

    众所周知,在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中就实现了带权限的文档下载操作。

  • 相关阅读:
    DES CBC java加密 php解密
    CocosCreator入门(一) ------ 简介、安装、微信小游戏
    H5游戏开发----CocosCreator、CocosCreator3D、Cocos2dX差异与选择
    GIT:git -c diff.mnemonicprefix=false -c core.quotepath=false revert --no-edit
    xxx was built without full bitcode" 编译错误解决
    程序猿之GitHub
    【北医三院】生孩、出院等事宜
    Unity:Andriod部分手机频繁闪退,vivo y55a等,Skipped 62 frames! The application may be doing too much work on its main thread
    初识LUA
    Unity3D开发之Matrix4x4矩阵变换
  • 原文地址:https://www.cnblogs.com/williamwsj/p/9580039.html
Copyright © 2011-2022 走看看