【后端】ASP.NET MVC登录拦截器

本文介绍了如何在ASP.NETMVC项目中使用LoginCheckFilterAttribute进行用户登录状态检查,以及如何在全局FilterConfig中配置过滤器来拦截未登录访问。同时提到缓存Session对登录状态的影响。
摘要由CSDN通过智能技术生成

参考:https://www.cnblogs.com/chenyanbin/p/11397576.html

根据实际项目,发现方式二更符合使用场景。

1、在Models下建类 LoginCheckFilterAttribute.cs。代码如下:

 using System.Web.Mvc;
 
 namespace ProjectName.Models
 {
     /// <summary>
     /// 校验用户是否登陆帮助类
     /// </summary>
     public class LoginCheckFilterAttribute: ActionFilterAttribute  //注意继承:ActionFilterAttribute
     {
         /// <summary>
         /// 是否校验,默认为true
         /// </summary>
         public bool IsChecked { get; set; }
         public override void OnActionExecuted(ActionExecutedContext filterContext)
         {
             base.OnActionExecuted(filterContext);
             //校验用户是否已登录
             if (IsChecked)
             {
                 if (filterContext.HttpContext.Session["loginInfo"] == null)
                 {
                     filterContext.HttpContext.Response.Redirect("/Login/Index");
                 }
             }
         }
     }
 }
 
 

2、在全局变量文件过滤器FilterConfig.cs中添加,引入Models。

实现的项目中没有啥过滤规则,写拦截器主要为了拦截未登录的操作者直接通过URL访问页面,所以直接根据提示抛出了一个空的方法,项目就可以跑起来了,同时其他功能并未受到影响。

代码如下:

using ProjectName.Models;
using System.Web.Mvc;

namespace ProjectName
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            //filters.Add(new MyExceptionFilterAttribute()); //自定义的过滤规则

            //校验用户是否登陆,默认为校验
            filters.Add(new LoginCheckFilterAttribute() { IsChecked = true });
        }
    }

    internal class MyExceptionFilterAttribute
    {
        public MyExceptionFilterAttribute()
        {
        }
    }
}

 3、在登录页面(不需要判断是否登陆的页面)中给类打上标签即可,引入Models。代码如下:

using ProjectName.Models;
namespace ProjectName.Controllers
{
    [LoginCheckFilter(IsChecked = false)]
    public class LoginController : Controller
    {
        ...
    }
}

碎碎念:
偶然发现连带解决了另一个小问题。项目中使用了缓存Session["loginInfo"],所以当缓存超时,页面会有红红的报错。但转念一想,缓存超时,相应也是登录信息被清空,所以 缓存超时=未登录!!!不知道这么理解对不对,但问题被解决了!开心o(* ̄▽ ̄*)ブ 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值