backend/ExamKing.WebApp.Student/Security/Handlers/JwtHandler.cs
(完整代码) 1KBusing System.Threading.Tasks;
using Furion;
using Furion.Authorization;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
namespace ExamKing.WebApp.Student
{
/// <summary>
/// JWT 授权自定义处理程序
/// </summary>
public class JwtHandler : AppAuthorizeHandler
{
/// <summary>
/// 请求管道
/// </summary>
/// <param name="context"></param>
/// <param name="httpContext"></param>
/// <returns></returns>
public override Task<bool> PipelineAsync(AuthorizationHandlerContext context, DefaultHttpContext httpContext)
{
// 此处已经自动验证 Jwt token的有效性了,无需手动验证
// 检查权限,如果方法时异步的就不用 Task.FromResult 包裹,直接使用 async/await 即可
return Task.FromResult(CheckAuthorzie(httpContext));
}
/// <summary>
/// 检查权限
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
private static bool CheckAuthorzie(DefaultHttpContext httpContext)
{
// 获取权限特性
var securityDefineAttribute = httpContext.GetMetadata<SecurityDefineAttribute>();
if (securityDefineAttribute == null) return true;
// 解析服务
var authorizationManager = httpContext.RequestServices.GetService<IAuthorizationManager>();
// 检查授权
return App.GetService<IAuthorizationManager>().CheckSecurity(securityDefineAttribute.ResourceId);
}
}
}
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。