• c# MVC利用AuthorizeAttribute验证用户是否登录


    现在多数网站必须验证用户登陆并利用Session或者Cookie存储用户登陆后才能进行操作,

    如果存储过期或者没用登陆则自动返回到登陆界面MVC自带AuthorizeAttribute属性进行验证。

    1、 用户登陆

    输入用户登录名和密码验证成功后,利用Session存储登陆用户信息

    HttpContext.Current.Session["LoginUser"] = userDTO;//userDTO登陆用户实体类

    2、创建AccountManagerment类下GetCurrentUser()方法,获取Session中存储的用户信息,返回实体类UserDTO

        public class AccountManagerment
        {
            /// <summary>
            /// 获取当前用户信息
            /// </summary>
            /// <returns></returns>
            public static UserDTO GetCurrentUser()
            {
                var session = HttpContext.Current.Session["LoginUser"];
                if (session == null)
                    return new UserDTO();
                return session as UserDTO;
            }
        }

    3、创建AccountAuthorizeAttribute类,继承AuthorizeAttribute,并重写OnAuthorization方法

      /// <summary>
        /// 验证用户是否登录
        /// </summary>
        public class AccountAuthorizeAttribute : AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext authorizationContext)
            {
                var httpContext = authorizationContext.HttpContext;
                var request = httpContext.Request;
    
                ActionResult actionResult = null;
                string message = string.Empty;
                var user = AccountManagerment.GetCurrentUser();
                if (user.rolepermissionDTO == null)
                {
                    String url = request.RawUrl;
                    UrlHelper urlHelper = new UrlHelper(request.RequestContext);
                    //利用Action 指定的操作名称、控制器名称和路由值生成操作方法的完全限定 URL。
                    string returnUrl = urlHelper.Action("Login", "Home", new { returnUrl = "", message = message });
                    actionResult = new RedirectResult(returnUrl);
                }
    
                authorizationContext.Result = actionResult;
            }
    }

    4、将属性[AccountAuthorize]置于整个Controller之上当用户有操作时,进入控制器前都会先验证用户是否登录,或者存储用户信息过期从而返回登录界面。

           [AccountAuthorize]
            public ActionResult Index(string title, string dp, string end, int id = 1)
            {
                return view();
            }
  • 相关阅读:
    KMP的next数组性质运用
    谁说前端不需要懂-Nginx反向代理与负载均衡
    Vue源码
    js学习网站
    CSS文本溢出显示省略号
    Js中带有小数的值相加产生的问题
    使用ueditor的时候,style样式传递到后台时被过滤没了
    实现div里的内容垂直居中
    安装sass报错
    js方法
  • 原文地址:https://www.cnblogs.com/xinbaba/p/8194142.html
Copyright © 2020-2023  润新知