操作过滤器—MVC中使用操作过滤器实现JWT权限认证
前言
上一篇文章分享了授权过滤器实现JWT进行鉴权,文章链接:授权过滤器—MVC中使用授权过滤器实现JWT权限认证,接下来将用操作过滤器实现昨天的JWT鉴权。
一、什么是操作过滤器?
与授权过滤器大部分一样,只是执行的时机和继承的接口有所不同。操作过滤器是在Action执行的前和后进行调用执行。而不是像授权过滤器一样,在刚开上来就执行授权过滤器。操作过滤器的实现了是 IAsyncActionFilter 或 IActionFilter 接口。

二、操作过滤器实现
操作过滤器重新定义Filter:
继承类Attribute, 接口MyAuthorizeFilterAttribute ,然后实现接口OnActionExecuted方法和OnActionExecuting方法,提供更多的对Action执行处理方法。此处在Action执行时书写自定义业务逻辑。
/// <summary>
/// 授权过滤器
/// </summary>
public class MyAuthorizeFilterAttribute : Attribute, IActionFilter
{
#region IActionFilter 操作过滤器实现
/// <summary>
/// Action执行后
/// </summary>
/// <param name="context"></param>
public void OnActionExecuted(ActionExecutedContext context)
{
}
/// <summary>
/// Action执行前
/// </summary>
/// <param name="context"></param>
public void OnActionExecuting(ActionExecutingContext context)
{
var authHeader = context.HttpContext.Request.Headers["Authorization"];
if (string.IsNullOrWhiteSpace(authHeader))
{
//var json = JsonConvert.SerializeObject(new OperationResult(OperationResultType.Error, "保存失败"));
//此接口必须携带token访问!
context.Result = new ContentResult()
{
Content = "此接口必须携带token访问,请登录携带Token访问",
ContentType = "text/html"//application/json
};
}
else //字段值不为空
{
authHeader = authHeader.ToString().Replace("Bearer", "").Trim();//去掉Bearer字串
if (authHeader == "")
{
context.Result = new ContentResult()
{
Content = "token验证失败:您没有权限调用此接口,请登录重新获取Token",
ContentType = "text/html"
};
}
else
{
LoginUserInfo LoginInfo = JwtHelper.GetJwtDecode(authHeader);
string UserName = LoginInfo.username;
string PassWord = LoginInfo.pwd;
double ExpireTimeStamp = LoginInfo.exp;
if (isTokenExpire(ExpireTimeStamp)) //这里应该验证有效期
{
//token验证失败:您没有权限调用此接口,请登录获取Token
context.Result = new ContentResult()
{
Content = "token验证失败:您没有权限调用此接口,请登录重新获取Token",
ContentType = "text/html"
};
}
}
}
}
#endregion
/// <summary>
/// 时间戳字符串
/// </summary>
/// <param name="timestamp"></param>
/// <returns></returns>
private bool isTokenExpire(double timestamp)
{
try
{
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));//当地时区
var expireTime = startTime.AddSeconds(timestamp);
if (expireTime > DateTime.Now)
{
return false;//未过期
}
else
{
return true;//已过期
}
}
catch (Exception ex)
{
return true;
}
}
}
其他实现代码和上篇保持一致:
三、验证:
操作过滤器实现的接口部分代码没有改动,只改动过滤器的书写,所以和上篇测试验证方法一致。
未授权访问:
不携带Token访问:

授权访问:
获取Token:

携带Token访问:

建群声明:本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!

操作过滤器—MVC中使用操作过滤器实现JWT权限认证的更多相关文章
- MVC中的错误过滤器无法拦截URL路径错误的解决办法
“/”应用程序中的服务器错误. 无法找到资源. 说明: HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确. 请求 ...
- MVC中的Action过滤器
Action过滤器可以用在调用动作方法之前或之后,执行一些特殊的逻辑,比如用登录验证: Action过滤器实现IActionFilter接口,该接口有两个方法: public interface IA ...
- .NET MVC中登陆授权过滤器的使用
1.写个类LoginAuthorityAttribute,继承自AuthorizeAttribute using System; using System.Collections.Generic; u ...
- MVC 中创建简单过滤器
1.新建一个类,继承自 ActionFilterAttribute类,并重写OnActionExecuting()方法 public class LoginFilter:ActionFilterAtt ...
- (11)Microsoft office Word 2013版本操作入门_word中表格操作
制作一个如下表格: 1. 插入一个4x4的表格或者手动绘制一个4x4表格. 1.1插入一个4x4表格或者绘制表格的按钮如下图所示 绘制表格,自己手动画比较复杂的表格 1.2对插入的表格: 点击表格的 ...
- 第十五节:Asp.Net Core中的各种过滤器(授权、资源、操作、结果、异常)
一. 简介 1. 说明 提到过滤器,通常是指请求处理管道中特定阶段之前或之后的代码,可以处理:授权.响应缓存(对请求管道进行短路,以便返回缓存的响应). 防盗链.本地化国际化等,过滤器用于横向处理业务 ...
- TP中CURD操作
CURD操作 CURD操作也就是模型操作数据表的基本操作.C(Create).U(Update).R(Read).D(Delete)操作就是增删改查操作. 6.1.增加操作 回想一下在mysql中增加 ...
- ABP中的数据过滤器
本文首先介绍了ABP内置的软删除过滤器(ISoftDelete)和多租户过滤器(IMultiTenant),然后介绍了如何实现一个自定义过滤器,最后介绍了在软件开发过程中遇到的实际问题,同时给出了 ...
- MVC中ActionFilterAttribute用法并实现统一授权
MVC中ActionFilterAttribute经常用来处理权限或者统一操作时的问题. 先写一个简单的例子,如下: 比如现在有一个用户管理中心,而这个用户管理中心需要登录授权后才能进去操作或浏览信息 ...
- 【转】MVC中的扩展点
原文地址:http://www.cnblogs.com/xfrog/tag/MVC/ MVC中的扩展点(十)辅助方法 MVC中的扩展点(九)验证 MVC中的扩展点(八)模型绑定 ...
随机推荐
- mac 如何快捷键打开当前文件夹对应的终端窗口
- 2023-01-11:体育馆的人流量。编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。返回按 visit_date 升序排列 的结果表。 DROP TAB
2023-01-11:体育馆的人流量.编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录.返回按 visit_date 升序排列 的结果表. DROP TABL ...
- 2021-10-28:打家劫舍 II。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装
2021-10-28:打家劫舍 II.你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装 ...
- 代码随想录算法训练营Day53 动态规划
代码随想录算法训练营 代码随想录算法训练营Day53 动态规划|● 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 1143.最长公共子序列 题目链接:1143.最长公 ...
- .Net NPOI Excel 导出
NPOI 导出 Excel 最终效果图 环境:Revit,WPF,NPOI 2.5.6,.Net Framework 4.7.2 一.引用 NPOI 右击项目引用,选择 "管理NuGet程序 ...
- 【一步步开发AI运动小程序】十一、人体关键点跳跃追踪
随着人工智能技术的不断发展,阿里体育等IT大厂,推出的"乐动力"."天天跳绳"AI运动APP,让云上运动会.线上运动会.健身打卡.AI体育指导等概念空前火热.那 ...
- 腾讯云 cloudbase 云开发使用笔记
产品概述 云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为开发者提供高可用.自动弹性扩缩的后端云服务,包含计算.存储.托管等 serverless ...
- R 语言绘制环状热图
作者:佳名来源:简书 - R 语言文集 1. 读取并处理基因表达数据 这是我的基因表达量数据: 图 Fig 1 > myfiles <- list.files(pattern = &quo ...
- 曲线艺术编程 coding curves 第五章 谐波图形(谐振图形) HARMONOGRAPHS
原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http:// ...
- 关于Unity3D第一视角下镜头穿墙的问题解决方法
昨天做室内模型的时候,遇到一个非常棘手的问题,那就是第一视角在室内运行的时候,会出现穿墙的效果.类似下图效果,在靠近墙壁的时候,出现了镜头看见了墙壁外的情况,很显然这是不符合逻辑的.我们要做的就是避免 ...