【netcore基础】wwwroot下静态资源文件访问权限控制
本文参考如下博问
https://q.cnblogs.com/q/107836
业务要求
上传的资源文件(.mp3 .mp4等)只有购买了之后才能有权限访问,所以对上传的资源文件目录进行访问权限控制
地址举例
https://localhost:5001/assets/upload/images/20181018/0d9819d2-14d2-47eb-a763-be9d19c69e42.mp4
后面的文件目录是对应上 wwwroot 下,上传的资源目录,正常情况下所有用户都可以访问,这里我们要控制权限,只有购买订单的用户才能访问。
首先
在 Startup.cs 文件的 Configure 方法里配置如下代码
app.UseWhen(
c => c.Request.Path.Value.Contains("assets"),
_ => _.UseMiddleware<AuthorizeStaticFilesMiddleware>()); app.UseStaticFiles();
这里我们判断包含关键字的请求才会交给 AuthorizeStaticFilesMiddleware 中间件去处理。
AuthorizeStaticFilesMiddleware 代码
using GeduData.Server;
using GeduService.Interface;
using GeduService.Req;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks; namespace GeduDistributionApi.Extension
{
public class AuthorizeStaticFilesMiddleware
{
private readonly RequestDelegate _next;
private readonly IResourceService _resourceService; public AuthorizeStaticFilesMiddleware(
RequestDelegate next , IResourceService resourceService
)
{
_next = next;
_resourceService = resourceService;
} public async Task Invoke(HttpContext context, IAuthorizationService authorService)
{
var url = context.Request.GetAbsoluteUri();
var sid = context.Request.Headers["sid"].ToString();
if (string.IsNullOrEmpty(sid))
{
throw new GeduException("resource 403 forbidden sid is empty");
} var result = _resourceService.ValidateResourceAuthor(new ValidateResourceAuthorReq
{
Url = url,
SID = sid,
}); if (result.IsSucess == false)
{
await context.ForbidAsync();
} await _next(context);
} }
}
这里我们获取到请求头的 sid ,这个 sid 是我们自己定义的登录授权,可以理解为 token,里面附带了用户信息
下面就是业务逻辑处理的代码,供参考
public ValidateResourceAuthorResp ValidateResourceAuthor(ValidateResourceAuthorReq req)
{
var loginUser = UserHelper._GetUser(req.SID); if (string.IsNullOrEmpty(req.Url))
{
throw new GeduException("url is empty");
}
//https://localhost:5001/assets/upload/images/20181018/0d9819d2-14d2-47eb-a763-be9d19c69e42.jpg
req.Url = req.Url.Trim().ToLower(); if (req.Url.EndsWith(".mp4") || req.Url.EndsWith(".mp3"))
{
//...
} return new ValidateResourceAuthorResp
{
IsSucess = true,
};
}
这里就可以写自己的订单查询,资源权限的逻辑代码了,根据业务需求自定义
搞定
【netcore基础】wwwroot下静态资源文件访问权限控制的更多相关文章
- SpringMVC 部署项目静态资源文件访问问题
问题:采用SpringMVC 部署项目后程序加载或用浏览器访问时出现类似的警告,2011-01-19 10:52:51,646 WARN [org.springframework.web.servle ...
- springmvc基础篇—处理图片静态资源文件
当我们在web.xml中对DispatcherServlet的过滤设置为/ 的时候,表示对所有的路径进行拦截过滤,那么不可避免的就会产生一个问题,那就是像图片这种静态资源文件我明明引用路径有,但就是加 ...
- Linux下进程的文件访问权限
本文转自 http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组), ...
- [Z] Linux下进程的文件访问权限
原文链接:http://blog.csdn.net/chosen0ne/article/details/10581883 对进程校验文件访问权限包括两个部分,一是确定进程的角色(属于哪个用户或者组), ...
- 解决.jsp及静态资源文件访问404的问题
我们在做Web项目时,经常将.jsp文件放到webapp\WEB-INF下,这时,我们访问jsp等文件的时候,就会报404. 如果是纯前后端分离的项目,后端只返回数据,不处理页面,也没问题.但,有时我 ...
- No mapping found for HTTP request with URI [/SLSaleSystem/js/jquery.dataTables.min.js] in DispatcherServlet with name 'spring' 静态资源文件访问不到,无解!!!!!!!
报错信息: 网上三种修改 web.xml 文件方法尝试未果 尝试未果:<mvc:default-servlet-handler/> 尝试未果:方法2:直接告诉spring,这个你就得这 ...
- 配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
1.配置url防盗链: 编辑:/usr/local/apache2.4/conf/extra/httpd-vhosts 文件 写入: <Directory /var/www/222/>Se ...
- spring mvc静态资源文件的引用
在页面的<title>下 <link rel="stylesheet" href="<%=request.getContextPath()%> ...
- SpringBoot静态资源文件
1.默认静态资源映射 Spring Boot对静态资源映射提供了默认配置 Spring Boot默认将 /** 所有访问映射到一下目录 classpath:/static classpath:/pub ...
随机推荐
- webbench进行压力测试
参考原文:http://www.vpser.net/opt/webserver-test.html webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力 ...
- vmware虚拟机环境下配置centos为静态IP的步骤
一.修改centos配置文件 配置文件位于/etc/sysconfig/network-scripts/ifcfg-eth0 修改的内容为: ONBOOT=yes BOOTPROTO=static I ...
- 使用log4net将C#日志发送到Elasticsearch
一.安装Elasticsearch 参考前面写的文章:https://www.cnblogs.com/songxingzhu/p/7909486.html 安装完Elasticsearch后,修改/e ...
- ubuntu 安装SSH并设置免密码登录
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost ssh-keygen -t rsa # 会有提示,都按回车就可以 cat ./id_rsa.pub >> . ...
- MySQL5.7多主一从(多源复制)同步配置
MySQL5.7多主一从(多源复制)同步配置(抄袭) 原文地址:https://my.oschina.net/u/2399373/blog/2878650 多主一从,也称为多源复制,数据流向: 主库1 ...
- Selenium 致命杀手(有关自动化的通病)
Do your scripts suffer from the following automation test flaky symptoms? Test randomly fail Works o ...
- redis 频率限制
方式1: $redis = new Redis(); //以自然时间控制 一自然分钟内超过100次进行限制, 屏蔽多久的时间必须为计数key时间的倍数 $key = 'xxxx'.date('Y-m- ...
- 前后分离模型之封装 Api 调用
Ajax 和异步处理 调用 API 访问数据采用的 Ajax 方式,这是一个异步过程,异步过程最基本的处理方式是事件或回调,其实这两种处理方式实现原理差不多,都需要在调用异步过程的时候传入一个在异步过 ...
- Linux ext3/ext4数据恢复
2012年12月9日 测试环境: Ubuntu 12.04 X86 +ext4 恢复文件使用的工具:extundelete(点击下载) 说明:当文件异常消失或者rm误删除后,避免在该分区中继 ...
- Windows Media Player 的文件格式支持情况
唔,官方文档:https://support.microsoft.com/zh-cn/help/316992/file-types-supported-by-windows-media-player ...