MVC 自定义属性验证登录

1.新建自定义属性类

复制代码
public class BaseFilterAttribute : FilterAttribute, IAuthorizationFilter
    {
        /// <summary>
        /// 自定义扩展属性,验证用户登录
        /// </summary>
        /// <param name="filterContext">AuthorizationContext 类将封装有关控制器、HTTP 上下文、请求上下文、路由数据、操作描述符和操作结果的信息。</param>
        public void OnAuthorization(AuthorizationContext filterContext)
        {

            if (filterContext.HttpContext == null)
            {
                throw new Exception("HTTP 上下文不存在!");
            }

            if (filterContext.HttpContext.Session == null)
            {
                throw new Exception("服务器Session不可用!");
            }

            if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)) return;
            if (filterContext.HttpContext.Session[ConfigHelper.SessionCookieKey] != null) return;

            //if(filterContext.HttpContext.Request.Cookies[ConfigHelper.SessionCookieKey]==null)
            //    filterContext.Result = new RedirectResult("~/Views/Account/Login.cshtml");

            if (CookiesHelper.GetCookie(ConfigHelper.SessionCookieKey) == null)
                filterContext.Result = new RedirectResult(ConfigHelper.SessionCookieReturnUrl);

        }
    }
复制代码

2.在相关的Controller类添加该自定义属性

[BaseFilter]
    public class PreListController : BaseController
    {
    }

3.设置不用验证的相关的方法允许匿名访问

        [AllowAnonymous]
        public ActionResult Login()
        {
            return View();
        }

 

posted @ 2016-07-05 17:41  FH1004322  阅读(916)  评论(0)    收藏  举报
编辑推荐:
· 「EF Core」框架是如何识别实体类的属性和主键的
· 独立开发,这条路可行吗?
· 我在厂里搞 wine 的日子
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
阅读排行:
· 推荐 5 款实用的 Docker 可视化管理工具,工作效率翻倍!
· 瞧瞧别人家的接口重试,那叫一个优雅!
· 独立开发第二周:构建、执行、规划
· 【EF Core】框架是如何识别实体类的属性和主键的
· MySQL 13 为什么表数据删掉一半,表文件大小不变?
历史上的今天:
2013-07-05 TruncateTableWithFKByTableName
点击右上角即可分享
微信分享提示