MiddleWare中间键实现 简单的防盗链 AOP

Posted hurui1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MiddleWare中间键实现 简单的防盗链 AOP相关的知识,希望对你有一定的参考价值。

看了Elevent老师的视频,把方法记一下

  public class RefuseStealingMiddleWare
    {
        private readonly RequestDelegate next;

        public RefuseStealingMiddleWare(RequestDelegate next)
        {
            this.next = next;
        }
        public async Task Invoke(HttpContext context)
        {
            string url = context.Request.Path.Value;
            if (!url.Contains(".png"))
            {
                await next(context);//正常流程
                return;
            }
            string urlReferrer = context.Request.Headers["Referer"];
            if (string.IsNullOrWhiteSpace(urlReferrer))//直接访问的图片
            {
                await this.SetForbiddenImage(context);
            }
            else if (!urlReferrer.Contains("localhost"))//这里是举例子用的localhost
            {
                await this.SetForbiddenImage(context);
            }
            else
            {
                await next(context);//正常流程
            }
        }
        /// <summary>
        /// 设置拒绝图片
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        private async Task SetForbiddenImage(HttpContext context)
        {
            string defaultImagePath = "wwwroot/image/menuDish.png";
            string path = Path.Combine(Directory.GetCurrentDirectory(), defaultImagePath);
            FileStream fs = File.OpenRead(path);
            byte[] bytes = new byte[fs.Length];
            await fs.ReadAsync(bytes, 0, bytes.Length);
            await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
        }
    }

在startup的configure方法加上

  public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
         
            //防止盗链
            app.UseMiddleware<RefuseStealingMiddleWare>();

以上是关于MiddleWare中间键实现 简单的防盗链 AOP的主要内容,如果未能解决你的问题,请参考以下文章

nginx图片防盗链

10.中间键Middleware

其实,图片防盗链的实现如此简单

一行代码实现防盗链!

Asp.Net Core 通过中间件防止图片盗链

配置 Nginx 防盗链