stevenjin 2023-11-24 10:09 采纳率: 97.6%
浏览 10
已结题

利用actionFilter过滤器实现,过期跳转到登录界面时失败

1.利用过滤器的特性,在Action上打上[JWTFilter]标记
2.每次用户执行方法时,进行权限校验。过期时,导航到登陆界面或刷新界面。但以下方法并没有实现页面跳转(网络中有请求Login页面,但没有显示出登陆界面):


 public class JWTFilter : Attribute, IActionFilter
 {
     public void OnActionExecuted(ActionExecutedContext context)
     {
          
     }

     public void OnActionExecuting(ActionExecutingContext context)
     {
          .......
         RedirectResult result = new RedirectResult("/System/Login");
         context.Result = result;
     }
 }
  • 写回答

3条回答 默认 最新

  • 有梦想的攻城狮 Java领域优质创作者 2023-11-24 13:03
    关注

    看起来您想在C#中实现一个JWT过滤器,对执行的方法进行权限校验,并在权限过期时导航到登陆界面或刷新界面。以下是一个简化的示例来说明如何实现这一目标。

    首先,您需要一个JWT过滤器。这个过滤器可以在每次执行Action之前检查请求是否包含有效的JWT。如果没有,或者它已过期,那么过滤器应该重定向用户到登录页面。

    这是一个如何创建JWT过滤器的示例:

    public class JWTFilter : Attribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var httpContext = context.HttpContext;
            var token = httpContext.Request.Headers["Authorization"].FirstOrDefault()?.Split(' ').Last();
    
            // 校验token,如果不存在、过期或无效,则重定向到登录页
            if (string.IsNullOrEmpty(token) || !ValidateToken(token))
            {
                httpContext.Response.Redirect("/Login");
            }
        }
    
        public void OnActionExecuted(ActionExecutedContext context) { }
    
        private bool ValidateToken(string token)
        {
            // 这里是您校验token的代码,例如使用JWT库解码并验证token
            // 如果验证成功返回true,否则返回false
            return true; // 或 false
        }
    }
    

    接下来,您可以在需要权限验证的Action上使用此过滤器:

    [JWTFilter]
    public IActionResult SomeRestrictedAction()
    {
        return Ok("This is a restricted action.");
    }
    

    这样,每次用户尝试访问带有JWTFilter的Action时,系统都会检查他们的JWT。如果没有有效的JWT,用户将被重定向到登录页面。

    请注意,上面的示例是一个简化的版本,您可能需要根据您的应用程序的特定需求进行调整。例如,您可能需要更详细地处理JWT的解码和验证,以及考虑其他安全性方面。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 修改了问题 11月24日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入