asp.net mvc自定义特性之负责系统的统一登录验证

添加自定义的特性需要先继承ActionFilterAttribute

首先是实现源码:

C#
public class CheckLoginAttribute : ActionFilterAttribute
{
/// <summary>
/// 负责系统的统一登录验证
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//判断触发此方法的本身和控制器只要有一个贴了[SkipCheckLogin]标签,则跳过登录检查
//判断action如果贴SkipCheckLoginAttribute标签,则阻断下面代码的运行
if (filterContext.ActionDescriptor.IsDefined(typeof(SkipCheckLoginAttribute), false))
{
return;
}
//Session为空返回的登录
if (filterContext.HttpContext.Session[Keys.Uinfo] == null)
{
ToLogin(filterContext, "您未登录");
return;
}
//用户为空返回登录
sys_user userInfo = filterContext.HttpContext.Session[Keys.Uinfo] as sys_user;
if(userInfo == null || userInfo.bn_id <= 0)
{
ToLogin(filterContext, "您未登录");
return;
}
//
DBContext db = DapperDbContext.GetDbContext();
var userinfo = db.Find<sys_user>(c => c.bn_id == userInfo.bn_id);
if (userinfo != null)
{
filterContext.HttpContext.Session[Keys.Uinfo] = userinfo;
filterContext.HttpContext.Session.Timeout = 1440;
}
}
/// <summary>
/// 没有登录就跳转到登录
/// </summary>
/// <param name="filterContext"></param>
private static void ToLogin(ActionExecutingContext filterContext,string msg)
{
//获取当前action方法是否贴有AjaxRequest特性标签
bool isajax = filterContext.ActionDescriptor.IsDefined(typeof(AjaxRequestAttribute), false);
//表示截获的action方法是作为ajax来请求的
if (isajax)
{
//如果ajax请求则应该返回json
JsonResult json = new JsonResult();
json.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
json.Data = new { status = StateTypeEnum.nologin, msg = msg, loginurl = "/Login/Login" };
filterContext.Result = json;
}
else
{
//如果是浏览器请求则直接将url跳转到登录页面即可
ContentResult content = new ContentResult();
content.Content = "<script>alert('"+ msg + "');top.location.href='/Login/Login'</script>";
filterContext.Result = content;
}
}
}

然后是它的使用方法:

C#
[CheckLogin]
public class WaterManagementController : Controller
{
......
}
posted @   壹-ZL  阅读(257)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示