.net core WebApi 控制器使用特性校验是否已经登录

发布时间 2023-07-25 10:19:35作者: yehuanyi

实现 ApiAuthorizeAction 自定义类:

public class ApiAuthorizeAction : Attribute,IAuthorizationFilter

{

  public void OnAuthorization(AuthorizationFilterContext context)
  {
    if (context == null)
      return;
    var token = context.HttpContext.Request.Headers["token"];
    if (string.IsNullOrWhiteSpace(token))
    {
      context.Result = new ApiResult(OperateCode.Api_无效的access_token,"请求头token不可以为空");//OperateCode为自定义的返回code,可以自行替换
      return;
    }
    var redisData = RedisHelper.StringGet(token);//redis缓存,存储登录用户信息 使用token作为key
    if (string.IsNullOrWhiteSpace(redisData))
    {
      context.Result = new ApiResult(OperateCode.Api_无效的access_token, "无效的授权信息或者授权信息已经过期");
      return;
    }
  }

}

在控制器中使用:

[ApiController]
[Route("api/[controller]/[action]")]
[ApiAuthorizeAction]//api登录校验
public class AdminUserDataController : BaseApiController //举例

原理:在每次进行API访问时会优先进入 ApiAuthorizeAction.OnAuthorization 中进行登录校验,校验传入的token是否合法。也可以通过该方法进行权限的校验扩展