10
06月
2025
在实际项目开发中,很多时候,需要判断用户是否已经登录,对于一些需要做出数据权限控制的系统来说,获取到当前用户的登录信息,
这更是有必要的。如果用户没有登录,则需要跳转到登录界面进行登录操作。
本文着重介绍.net mvc 在拦截器中实现登录验证和控制。
第一步:
新建一个类,继承自 ActionFilterAttribute 类,重写里面的OnActionExecuting方法,意思就是只要执行指定的控制器类,都会先执行这个方法。
AuthAttribute.cs
#region 是否登录
public bool IsLogin
{
get;
set;
}
#endregion
/// <summary>
/// 验证登录(action执行前会先执行这里)
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (IsLogin == true)
{
//如果不存在身份信息
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
ContentResult Content = new ContentResult();
Content.Content = string.Format("<script type='text/javascript'>alert('请先登录!');window.location.href='{0}';</script>", "/Tuser/Login");
filterContext.Result = Content;
}
}
}
第二步:
在你需要拦截的控制器头上 添加
[AuthAttribute(IsLogin = true)]
这里的true 表示,该方法需要先判断用户是否登录。
//多个的话 就按照这种写法
[AuthAttribute(IsLogin = true, IsChange = true)]
public ActionResult Index()
{
....
}
这样只要调用了这个UppassForm控制器,则会先判断是否登录,未登录的话则会提示请登录
至于用户登录以后,你可以把信息写入cookie中,上面的拦截器里的判断方法,你可以根据实际需求从cookie里取值,或者就直接采用这种写法均可以
string UserData = JsonConvert.SerializeObject(resultDt);//序列化用户实体
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, "userInfo", DateTime.Now, DateTime.Now.AddHours(12), false, UserData);
HttpCookie Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(Ticket));//加密身份信息,保存至Cookie
Response.Cookies.Add(Cookie);
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
.NET C# JAVA 基础交流群 1095936339 欢迎入群 交流!
上一篇: navicat 链接工具 破解版