.net MVC 如何拦截器拦截非法登录

原理,利用session的机制,只有正常登录才会去到后台,如果是非法登录,则返回到初始界面

1、在App_Start文件里面新建一个LoginInterceptor类

这是里面的代码,效果就是当进入登陆界面就不拦截,如果是其他界面就要判断是否存在session

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;

using System.Web.Mvc;
using System.Web.Routing;

public class LoginInterceptor : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // 获取当前请求的控制器和操作方法
        string controllerName = filterContext.RouteData.Values["controller"].ToString();
        string actionName = filterContext.RouteData.Values["action"].ToString();

        // 如果当前请求的是登录操作,则不进行重定向
        if (controllerName == "Home" && actionName == "Login")
        {
            base.OnActionExecuting(filterContext);
            return;
        }

        // 检查用户是否已登录
        if (filterContext.HttpContext.Session["user"] == null)
        {
          

            /*
        返回到了登陆界面,并且弹出提示信息
            */

            filterContext.HttpContext.Response.Write("<script>alert('请先登录!');window.location.href='/Home/Login';</script>");


            filterContext.Result = new EmptyResult();

            return;
        }

           base.OnActionExecuting(filterContext);



    }


}

2、在对应的控制层标记session

 这里是你要使用的控制器标注拦截器即可,标注后说明这个控制器里面都受到该拦截器限制

 [AllowAnymous]:用于标记不受拦截器作用的方法

        [HttpPost]
        [AllowAnonymous]
        public ActionResult Login(string username,string password)
        {
            //如果账号或者密码有空,直接返回失败
            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                return ErrorResult("缺少必要参数,请求失败");
            }
            else
            {
                //调用用户登录的方法
                var data = logicUser.CheckLogin(username, password);

                if (data != null)
                {
                    Session["user"] = true;

                    return SuccessResult("登录成功");
                   
                }
                else
                {
                 
                    return ErrorResult("登录失败");
                }
            }
        }

总结思路:创建一个拦截器类继承 ActionFilterAttribute,在里面重写了 OnActionExecuting这个方法,表明什么需要拦截,什么不用拦截即可。思路跟java里面的spring MVC思路差不多,只不过springmvc是实现HandlerInterceptor接口,里面也是重写preHandle方法,不定期更新c#的asp.net,目前已转行c#,已上班。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值