From 8ffda541b48cbf619f8493196da4fb44d4f3ddc5 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 05 九月 2025 10:22:55 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs | 78 +++++++++++++++++++++++++++++++++++++- 1 files changed, 75 insertions(+), 3 deletions(-) diff --git a/FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs b/FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs index aa2a45a..d395149 100644 --- a/FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs +++ b/FlexJobApi.Core/Utils/JwtUtils/JwtHandler.cs @@ -1,16 +1,88 @@ -锘縰sing Furion.Authorization; +锘縰sing FlexJobApi.Core.Entities.Common; +using Furion; +using Furion.Authorization; +using Furion.DatabaseAccessor; +using Furion.DataEncryption; +using Furion.DistributedIDGenerator; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Threading.Tasks; namespace FlexJobApi.Core; public class JwtHandler : AppAuthorizeHandler { + public override async Task HandleAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) + { + // 鑷姩鍒锋柊 token + if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext())) + { + await AuthorizeHandleAsync(context); + } + else + { + + var resourceLog = new ResourceLog(); + resourceLog.CreatedTime = DateTimeOffset.Now; + var stopwatch = Stopwatch.StartNew(); + var serviceScopeFactory = App.GetService<IServiceScopeFactory>(); + var serviceScope = serviceScopeFactory.CreateScope(); + var rep = serviceScope.ServiceProvider.GetRequiredService<IRepository<ResourceLog, LogDbContextLocator>>(); + resourceLog.Id = IDGen.NextID(); + resourceLog.TraceId = App.GetTraceId(); + resourceLog.Method = EnumUtils.GetEnum<EnumResourceMethod>(httpContext.Request.Method); + resourceLog.Domain = $"{httpContext.Request.Scheme}://{httpContext.Request.Host}"; + resourceLog.Path = httpContext.Request.Path; + resourceLog.ClientIpAddress = httpContext.GetRemoteIpAddressToIPv4(); + if (httpContext.Request.ContentType?.Contains("application/json") == true) + { + httpContext.Request.EnableBuffering(); // 鍏佽澶氭璇诲彇 + var body = await new StreamReader(httpContext.Request.Body).ReadToEndAsync(); + httpContext.Request.Body.Position = 0; // 閲嶇疆娴佷綅缃� + resourceLog.Request = body; + } + else + { + resourceLog.Request = httpContext.Request.Query.ToJson(); + } + resourceLog.RequestHeaders = httpContext.Request.Headers.ToJson(); + + context.Fail(); + + resourceLog.UpdatedTime = DateTimeOffset.Now; + resourceLog.Response = new FriendlyResult<object> + { + TraceId = resourceLog.TraceId, + Code = 401, + Success = false, + Timestamp = DateTime.Now.ToTimeStamp() + }.ToJson(); + resourceLog.ResponseHeaders = httpContext.Response.Headers.ToJson(); + resourceLog.IsSuccess = false; + + stopwatch.Stop(); + resourceLog.ElapsedMilliseconds = stopwatch.ElapsedMilliseconds; + + await rep.InsertNowAsync(resourceLog); + } + } + + /// <summary> + /// 楠岃瘉绠¢亾锛屼篃灏辨槸楠岃瘉鏍稿績浠g爜 + /// </summary> + /// <param name="context"></param> + /// <param name="httpContext"></param> + /// <returns></returns> public override Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext) { - // 杩欓噷鍐欐偍鐨勬巿鏉冨垽鏂�昏緫锛屾巿鏉冮�氳繃杩斿洖 true锛屽惁鍒欒繑鍥� false - + // 妫�鏌ユ潈闄愶紝濡傛灉鏂规硶鏄紓姝ョ殑灏变笉鐢� Task.FromResult 鍖呰9锛岀洿鎺ヤ娇鐢� async/await 鍗冲彲 return Task.FromResult(true); } } -- Gitblit v1.9.1