ReZero 用集成即我自己的JWT后,发现登录不了系统;怎么才能不拦截 ReZero 登录界面的接口 返回
public class MyAop : DefaultSuperApiAop
{
public override Task OnExecutingAsync(InterfaceContext context)
{
var httpContext = context.HttpContext;
var requestPath = httpContext.Request.Path.Value; // 获取当前请求的路径
// 1. 检查这个接口是否标记了 [AllowAnonymous](比如登录接口)
var endpoint = httpContext.GetEndpoint();
if (endpoint?.Metadata.GetMetadata<AllowAnonymousAttribute>() != null)
{
// 如果有这个标记,直接放行,不需要检查Token
return base.OnExecutingAsync(context);
}
// 2. 从请求头中获取Token
string authHeader = httpContext.Request.Headers["Authorization"].FirstOrDefault();
if (string.IsNullOrEmpty(authHeader))
{
httpContext.Response.StatusCode = 401; // 未授权
throw new System.UnauthorizedAccessException("请求头中未找到Authorization信息");
}
// 3. 检查Token格式是否正确(必须以"Bearer "开头)
if (!authHeader.StartsWith("Bearer ", System.StringComparison.OrdinalIgnoreCase))
{
httpContext.Response.StatusCode = 401;
throw new System.UnauthorizedAccessException("Token格式错误,应以'Bearer '开头");
}
// 4. 提取真正的Token字符串
var token = authHeader.Substring("Bearer ".Length).Trim();
// 5. 【核心】使用你自己的JwtHelper验证Token!
var validateResult = JwtHelper.ValidateToken(token);
if (!validateResult.IsValid) // 如果验证失败
{
httpContext.Response.StatusCode = 401;
throw new System.UnauthorizedAccessException($"Token无效: {validateResult.ErrorMessage}");
}
// 6. 验证成功!将Token中的用户信息(Claims)传递给ReZero
if (validateResult.Claims != null)
{
foreach (var claim in validateResult.Claims)
{
// 这行代码是把信息“贴”到ReZero的上下文里,后续接口可能用到
context.AttachClaimToHttpContext(claim.Key, claim.Value);
}
}
// 7. 所有检查通过,继续执行真实的接口逻辑
return base.OnExecutingAsync(context);
}
}

热忱回答(9)
-
fate sta VIP0
1周前写一个空的API demo ,删掉OBJ和BIN打包上传。
0 回复 -
X VIP0
1周前0 回复 -
X VIP0
1周前@fate sta:请看Demo
0 回复 -
fate sta VIP0
1周前
0 回复 -
fate sta VIP0
1周前DEMO不是有效的吗
0 回复 -
fate sta VIP0
1周前rezero创建的API都有效果。
0 回复 -
X VIP0
1周前@fate sta:我要的是可以登录,然后可以在rezero平台上面创建接口啊,自己的和rezero都能用
0 回复 -
X VIP0
1周前我知道是有效果的,但是rezero登录都拦截了,这个是不是有问题
0 回复 -
fate sta VIP0
1周前Rezero1.8.31
已修复
0 回复