MVC3中使用AuthorizeAttribute特性来完成登陆权限的验证

简介:

过去的过去,往往对于一种问题有一个很直观的解决方法,如,判断用户是否登陆,判断用户session是否为空,一般会这个写在页面中:

if(HttpContext.Session.IsNewSession)
{
  // go to Logon
}

每个需要验证的页面都要这样去写同样的代码,这样的程序是我们不提供的,因为它重复了自己。

当.net出现Attribute之后,MVC出现了之后,改变了这一切,如果希望判断这个页面的访问理否需要登陆或者其它权限,只需要写类似这样的代码即可:

       [UserAuthentication(UserToUrlEnum = UserToUrlEnum.Login)]
        public ActionResult RegisterRedirect()
        {
            // code
        }

而一般来说,我们的UserAuthentication这个类,我们下文称为过滤器,一般是这样来定义的:

namespace _20110711MVC3的学习.Filter
{
    /// <summary>
    /// 验证类型列举
    /// </summary>
    public enum UserToUrlEnum
    {
        /// <summary>
        /// 登录
        /// </summary>
        Login,
        /// <summary>
        /// 注册
        /// </summary>
        Register,
        /// <summary>
        /// 认证
        /// </summary>
        Certificate,
    }
 
    /// <summary>
    /// 用户验证过滤器
    /// </summary>
    public class UserAuthentication : AuthorizeAttribute
    {
        const string DOMAIN = "http://www.test.com";
        public UserToUrlEnum UserToUrlEnum { get; set; }
        /// <summary>
        /// 构造函数
        /// </summary>
        public UserAuthentication()
        {
            this.UserToUrlEnum = UserToUrlEnum.Login;
        }
        /// <summary>
        /// 执行前验证
        /// </summary>
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Session.IsNewSession && !ClientHelper.Current.HasUser)
            {
                switch (this.UserToUrlEnum)
                {
                    case UserToUrlEnum.Login:
                        {
 
 

VCommons.Http.CookieHelper.Write("return_page",

HttpContext.Current.Request.Url.ToString());

                            HttpContext.Current.Response.Redirect(DOMAIN +
                            "/Register/Login", true);
                        }
                        break;
                    case UserToUrlEnum.Register:
                        {
 
 

filterContext.HttpContext.Response.Redirect(DOMAIN +

"/Register/Register", true);

                        }
                        break;
                }
            }
            else if (this.UserToUrlEnum == UserToUrlEnum.Certificate)
            {
                filterContext.HttpContext.Response.Redirect(DOMAIN + "/Register/Certificate");
            }
 
        }
 
    }
}

小知识:attribute可以加在类的上面,也可以加在方法的上面,根据实际情况而定。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:MVC3中使用AuthorizeAttribute特性来完成登陆权限的验证,如需转载请自行联系原博主。

目录
相关文章
|
前端开发 .NET 数据安全/隐私保护
菜鸟入门【ASP.NET Core】15:MVC开发:ReturnUrl实现、Model后端验证 、Model前端验证
ReturnUrl实现 我们要实现returnUrl,我们需要在注册(Register)方法中接收传进的returnUrl并给它默认值null,然后将它保存在ViewData里面 然后我们定义一个内部方法来判断跳转returnUrl //内部跳转 private IActionR...
2576 0
|
存储 前端开发 Java
Spring MVC 中的数据绑定和验证机制是什么,如何使用
Spring MVC 中的数据绑定和验证机制是什么,如何使用
|
设计模式 前端开发 druid
Java Web实战 | MVC案例:用户登录验证
本文结合图1的多层设计架构,以用户登录验证应用程序为例,说明如何将MVC模式应用于Web应用程序的开发,具体步骤如下所述。
195 0
Java Web实战 | MVC案例:用户登录验证
|
前端开发 Java Spring
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
《Spring MVC》 第八章 拦截器实现权限验证、异常处理
225 0
|
缓存 前端开发 Oracle
基于 .NET Core MVC 的权限管理系统
基于.NET Core Web开发,借鉴了很多开源项目的优点,让你开发Web管理系统和移动端Api更简单。它可以用于所有的Web项目,例如网站管理后台、CMS、CRM、ERP、OA这类的系统和移动端Api。
314 0
基于 .NET Core MVC 的权限管理系统
|
前端开发 JavaScript API
NET MVC第七章、jQuery插件验证
NET MVC第七章、jQuery插件验证
181 0
NET MVC第七章、jQuery插件验证
|
前端开发 数据库 计算机视觉
关于MVC中模型model的验证问题
关于MVC中模型model的验证问题
143 0
关于MVC中模型model的验证问题
|
Web App开发 前端开发
MVC5+EF6 入门完整教程12--灵活控制Action权限
原文:MVC5+EF6 入门完整教程12--灵活控制Action权限 大家久等了。 本篇专题主要讲述MVC中的权限方案。 权限控制是每个系统都必须解决的问题,也是园子里讨论最多的专题之一。 前面的系列文章中我们用到了 SysUser, SysRole, SysUserRole 这几个示例表。
1218 0
|
前端开发 UED .NET
2.ASP.NET全栈开发之在MVC中使用服务端验证
上一章我们在控制台中基本的了解了FluentValidation是如何简洁,优雅的完成了对实体的验证工作,今天我们将在实战项目中去应用它。 首先我们创建一个ASP.NET MVC项目,本人环境是VS2017, 创建成功后通过在Nuget中使用 Install-Package FluentValidation -Version 7.
1138 0
|
前端开发 JavaScript .NET
菜鸟入门【ASP.NET Core】14:MVC开发:UI、 EF + Identity实现、注册实现、登陆实现
前言 之前我们进行了MVC的web页面的Cookie-based认证实现,接下来的开发我们要基于之前的MvcCookieAuthSample项目做修改。 MvcCookieAuthSample项目地址:http://www.
2086 0