This commit is contained in:
cjd
2025-11-04 21:09:16 +08:00
parent 8260e293c7
commit bb90a020dc
592 changed files with 61749 additions and 27 deletions

View File

@@ -0,0 +1,77 @@
using System.Net;
using System.Threading.Tasks;
using DouyinApi.Common.Swagger;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
namespace DouyinApi.Extensions.Middlewares
{
public class SwaggerAuthMiddleware
{
private readonly RequestDelegate next;
public SwaggerAuthMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// 也可以根据是否是本地做判断 IsLocalRequest
if (context.Request.Path.Value.ToLower().Contains("index.html"))
{
// 判断权限是否正确
if (IsAuthorized(context))
{
await next.Invoke(context);
return;
}
// 无权限跳转swagger登录页
context.RedirectSwaggerLogin();
}
else
{
await next.Invoke(context);
}
}
public bool IsAuthorized(HttpContext context)
{
// 使用session模式
// 可以使用其他的
return context.IsSuccessSwagger();
}
/// <summary>
/// 判断是不是本地访问
/// 本地不用swagger拦截
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public bool IsLocalRequest(HttpContext context)
{
if (context.Connection.RemoteIpAddress == null && context.Connection.LocalIpAddress == null)
{
return true;
}
if (context.Connection.RemoteIpAddress.Equals(context.Connection.LocalIpAddress))
{
return true;
}
if (IPAddress.IsLoopback(context.Connection.RemoteIpAddress))
{
return true;
}
return false;
}
}
public static class SwaggerAuthorizeExtensions
{
public static IApplicationBuilder UseSwaggerAuthorized(this IApplicationBuilder builder)
{
return builder.UseMiddleware<SwaggerAuthMiddleware>();
}
}
}