• Mvc总结-筛选器(Filter)


    Filter(筛选器)是以AOP(面向方面设计)的方式进行设计的。可用与权限验证、日志记录、异常处理等。主要有以下几种:

           
           
           
           
           
           
           
           
           
           

      授权筛选器:AuthorizationFilter  接口(IAuthorizationFilter)

      操作筛选器:ActionFilter 接口(IActionFilter)

      结果筛选器 : ResultFilter 接口(IResultFilter)

      异常筛选器 : ExceptionFilter 接口(IExceptionFilter)

      执行顺序:AuthorizationFilter -> ActionFilter -> ResultedFilter -> ExceptionFilter

    1、授权筛选器

    可用于权限验证,显示代码如下

    /// <summary>
        /// 自定义用户授权
        /// </summary>
        public class UserAuthorize : AuthorizeAttribute
        {
            /// <summary>
            /// 授权失败时呈现的视图
            /// </summary>
            public string AuthorizationFailView { get; set; }
    
            /// <summary>
            /// 请求授权时执行
            /// </summary>
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                //获取controller和action的值
                string controllerName = filterContext.RouteData.Values["controller"].ToString().ToLower();
                string actionName = filterContext.RouteData.Values["action"].ToString().ToLower();
    
                //根据controller和action获取角色操作权限(实际项目中可通过数据库查询实现赋值权限)
                string roles = "";
                if (controllerName == "控制1" && controllerName == "动作1")
                    roles = "1";
    
                if (roles != "")
                {
                    this.Roles = roles;     //有权限操作当前控制器和Action的角色id
                }
                base.OnAuthorization(filterContext);   //进入AuthorizeCore
            }
    
            /// <summary>
            /// 自定义授权检查(返回False则授权失败)
            /// </summary>
            protected override bool AuthorizeCore(HttpContextBase httpContext)
            {
                if (httpContext.User.Identity.IsAuthenticated)
                {
                    string userName = httpContext.User.Identity.Name;    //当前登录用户的用户名
                    string userRole = "1";//默认权限1
                    if (userName != "")
                    {
                        //只有管理员才可以进入
                        if (userName == "管理员")
                        {
                            if (userRole == Roles)
                                return true;
                        }
                        return false;
                    }
                    else
                        return false;
                }
                else
                    return false;     //进入HandleUnauthorizedRequest 
            }
    
            /// <summary>
            /// 处理授权失败的HTTP请求
            /// </summary>
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                filterContext.Result = new ViewResult { ViewName = AuthorizationFailView };
            }
        }
    

      实现完成权限筛选后,添加具体引用

    public class FilterDemoController : Controller
        {
            //登录默认赋值用户为:管理员
            public ActionResult Login()
            {
                FormsAuthentication.SetAuthCookie("管理员", true);   //cookie默认有效期为:2880分钟
    
                return RedirectToAction("Index", "FilterDemo");
            }
         //权限筛选页
            [UserAuthorize(AuthorizationFailView="Err")]
            public ActionResult Index()
            {
                return View();
            }
        }
    

    2、操作筛选器、结果筛选器

    3、异常筛选器

    可用于错误日志记录、展示错误页面等

  • 相关阅读:
    9.6、Libgdx之罗盘
    9.5、Libgdx加速度计
    9.4、Libgdx简单字符输入
    9.3、Libgdx手势检测
    9.2.2、Libgdx的输入处理之事件处理
    9.2.1、Libgdx的输入处理之轮询
    基于ip的虚拟主机配置——在一台服务器上绑定多个 IP 地址
    解决Nginx出现403 forbidden
    SpringMVC中JSONP的基本使用
    centOS7 tomcat 开机自启 自启动设置
  • 原文地址:https://www.cnblogs.com/hjxh/p/7875733.html
Copyright © 2020-2023  润新知