zoukankan      html  css  js  c++  java
  • Forms权限认证

    做项目的时候经常需要权限认证,我实践了,做下笔记。

    Web.Config

    <system.web>
       <!--通过 <authentication> 节可以配置 ASP.NET 用来识别进入用户的安全身份验证模式。-->
        <authentication mode="Forms">
          <forms name="AspxAuth" loginUrl="/Login.aspx" timeout="30" protection="All" path="/">    
          </forms>
        </authentication>
        <authorization>
          <deny users="?"/>
        </authorization>
      </system.web>
       

    登陆页面的代码:

                    FormsAuthentication.Initialize();       

                    string userRoles =“角色"; //调用UserToRole方法来获取role字符串            

                     FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, txtUsername.Text, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/"); //建立身份验证票对象
                    string HashTicket = FormsAuthentication.Encrypt (Ticket) ; //加密序列化验证票为字符串
                    HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket) ;
                    //生成Cookie
                    Context.Response.Cookies.Add (UserCookie) ; //输出Cookie
                    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
                    if (Ticket.IsPersistent)
                    {
                        cookie.Expires = Ticket.Expiration;
                    }
                    //把准备好的cookie加入到响应流中
                    Response.Cookies.Add(cookie);

                    //转发到请求的页面
                    Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, false));

                    else
                    {
                        Context.Response.Redirect("Main");
                    }

    Global.asax文件

     protected void Application_AuthenticateRequest(object sender, EventArgs e)
            {

                HttpApplication App = (HttpApplication)sender;
                HttpContext Ctx = App.Context; //获取本次Http请求相关的HttpContext对象
                if (Ctx.Request.IsAuthenticated == true) //验证过的用户才进行role的处理
                {
                    FormsIdentity Id = (FormsIdentity)Ctx.User.Identity;
                    FormsAuthenticationTicket Ticket = Id.Ticket; //取得身份验证票
                    string[] Roles = Ticket.UserData.Split(','); //将身份验证票中的role数据转成字符串数组
                    Ctx.User = new GenericPrincipal(Id, Roles); //将原有的Identity加上角色信息新建一个GenericPrincipal表示当前用户,这样当前用户就拥有了role信息
                }

            }

     页面判断是否有权限代码如下:

    FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                    //判断通过身份验证的用户是否是Admin角色
                    if (!id.Ticket.UserData.Contains("Admin"))
                    {
                        //跳转到访问权限不够的错误提示页面 
                    }

  • 相关阅读:
    JStack分析cpu消耗过高问题
    Machine Learning in Action – PCA和SVD
    Machine Learning in Action -- FP-growth
    Machine Learning in Action -- 树回归
    Machine Learning in Action -- 回归
    Kafka 0.8 配置参数解析
    统计学习方法笔记 -- 隐马尔可夫模型
    Machine Learning in Action -- AdaBoost
    统计学习方法笔记 -- Boosting方法
    Andrew Ng机器学习公开课笔记–Reinforcement Learning and Control
  • 原文地址:https://www.cnblogs.com/zhangsongshan/p/3052870.html
Copyright © 2011-2022 走看看