using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_Core.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.Response.Redirect("/swg-login.html"); } else { await next.Invoke(context); } } public bool IsAuthorized(HttpContext context) { // 使用sessionæ¨¡å¼ // å¯ä»¥ä½¿ç”¨å…¶ä»–çš„ return context.Session.GetString("swagger-code") == "success"; } /// <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>(); } } }