• .net MVC 拦截器


    1、在App_Start文件夹添加类LoginInterceptor ,代码如下:


    using Jayrock.Json.Conversion;
    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net.Http;
    using System.Web;
    using System.Web.Helpers;
    using System.Web.Mvc;
    using System.Web.Routing;

    public class LoginInterceptor : ActionFilterAttribute
    {

        #region 属性
        ///


        /// 记录是否登陆、已经验证
        ///

        public bool IsLogin { get; set; }
        #endregion

        //[LoginInterceptor] 在控制器类上加这个标注,标注后说明这个控制器里面都受到该拦截器限制
         //[LoginInterceptor(IsLogin = true)] 在具体的方法上加这个标注,可以跳过token的验证
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            // 获取当前请求的控制器和操作方法
            string controllerName = filterContext.RouteData.Values["controller"].ToString();
            string actionName = filterContext.RouteData.Values["action"].ToString();
          
            // 如果当前请求的是登录操作,则不进行重定向
            if (controllerName == "User" && actionName == "login")
            {
                base.OnActionExecuting(filterContext);
                return;
            }
            
            if (!IsLogin)
            {
                //验证token
                string token = ""; 
                if (filterContext.HttpContext.Request.Form.AllKeys.Contains("token"))
                {
                    token = filterContext.HttpContext.Request.Form["token"].ToString().Trim();
                }
                if (filterContext.HttpContext.Request.Params.AllKeys.Contains("token"))
                {
                    token = filterContext.HttpContext.Request.Params["token"].ToString().Trim();
                }
                //filterContext.HttpContext.Response.Write("");
                //filterContext.Result =new EmptyResult();

                var obj = new { succeed = false, data = "未登录或被其他人登录了,请重新登录", reload = "1" };
                if (!string.IsNullOrEmpty(token))
                {
                    T_AppToken_BLL bllToken = new T_AppToken_BLL();
                    if (!bllToken.isLogin(token, 1))
                    { 
                        //形成日志....?
                        //token验证未通过
                        filterContext.Result = new System.Web.Mvc.JsonResult()
                        {
                            Data = obj,
                            ContentEncoding = System.Text.Encoding.UTF8,
                            JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                            ContentType = "json"
                        };
                        return;
                    }
                }
                else
                {
                    //token值为空
                    filterContext.Result = new System.Web.Mvc.JsonResult()
                    {
                        Data = obj,
                        ContentEncoding = System.Text.Encoding.UTF8,
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        ContentType = "json"
                    };
                    return;
                }
            }
     

            base.OnActionExecuting(filterContext);

        }


    }

    2、[LoginInterceptor]

    在控制器类上加这个标注,标注后说明这个控制器里面都受到该拦截器限制

    3、  [LoginInterceptor(IsLogin = true)]

    在具体的方法上加这个标注,在拦截器方法里可以跳过token的验证

  • 相关阅读:
    Spring Boot + shiro 去除Redis缓存
    openGauss数据库源码解析系列文章—— 密态等值查询技术详解(下)
    MySQL主从复制与读写分离
    【Java基础篇】逻辑控制
    虚拟Dom真的能够提高性能么
    面试题:思考Tomcat 类加载器为什么要违背双亲委派模型?
    IT行业就业方向:探索未来的职业机会
    java-net-php-python-2020ssm考研题目管理系统计算机毕业设计程序
    经典c程序100例==31--40
    极智开发 | ubuntu 安装和配置 git
  • 原文地址:https://blog.csdn.net/wysdong/article/details/133995044