一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

asp.net Forms身份驗(yàn)證和基于角色的權(quán)限訪問(wèn)

主要思想:Forms身份驗(yàn)證用來(lái)判斷是否合法用戶(hù),當(dāng)用戶(hù)合法后,再通過(guò)用戶(hù)的角色決定能訪問(wèn)的頁(yè)面。
具體步驟:
    1、創(chuàng)建一個(gè)網(wǎng)站,結(jié)構(gòu)如下:
        網(wǎng)站根目錄
            Admin目錄            ---->    管理員目錄
                Manager.ASPx        ---->    管理員可以訪問(wèn)的頁(yè)面
            Users目錄            ---->    注冊(cè)用戶(hù)目錄
                Welcome.ASPx        ---->    注冊(cè)用戶(hù)可以訪問(wèn)的頁(yè)面
            Error目錄            ---->    錯(cuò)誤提示目錄
                AccessError.htm        ---->    訪問(wèn)錯(cuò)誤的提示頁(yè)面
            default.ASPx            ---->    網(wǎng)站默認(rèn)頁(yè)面
            login.ASPx            ---->    網(wǎng)站登錄頁(yè)面
            web.config            ---->    網(wǎng)站配置文件
    2、配置web.config如下:
復(fù)制代碼 代碼如下:
        <configuration>
            <system.web>
                <!--設(shè)置Forms身份驗(yàn)證-->
                <authentication mode="Forms">
                    <forms loginUrl="Login.ASPx" name="MyWebApp.APSXAUTH" path="/" protection="All" timeout="30"/>
                </authentication>
                <authorization>
                    <allow users="*"/>
                </authorization>
            </system.web>
        </configuration>

        <!--設(shè)置Admin目錄的訪問(wèn)權(quán)限-->
        <location path="Admin">
            <system.web>
                <authorization>
                    <allow roles="Admin"/>
                    <deny users="?"/>
                </authorization>
            </system.web>
        </location>
        <!--設(shè)置Users目錄的訪問(wèn)權(quán)限-->
        <location path="Users">
            <system.web>
                <authorization>
                    <allow roles="User"/>
                    <deny users="?"/>
                </authorization>
            </system.web>
        </location>

    3、在login.ASPx頁(yè)面的登錄部分代碼如下:
復(fù)制代碼 代碼如下:
        protected void btnLogin_Click(object sender, EventArgs e)
        {    
            //Forms身份驗(yàn)證初始化
            FormsAuthentication.Initialize();
            //驗(yàn)證用戶(hù)輸入并得到登錄用戶(hù),txtName是用戶(hù)名稱(chēng),txtPassword是登錄密碼
            UserModel um = ValidUser(txtName.Text.Trim(),txtPassword.Text.Trim());
            if (um != null)
            {
             //創(chuàng)建身份驗(yàn)證票據(jù)
             FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                                            um.Name,
                                            DateTime.Now,
                                            DateTime.Now.AddMinutes(30),
                                            true,
                                            um.Roles,//用戶(hù)所屬的角色字符串
                                            FormsAuthentication.FormsCookiePath);
             //加密身份驗(yàn)證票據(jù)
             string hash = FormsAuthentication.Encrypt(ticket);
             //創(chuàng)建要發(fā)送到客戶(hù)端的cookie
             HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
             if (ticket.IsPersistent)
             {
                cookie.Expires = ticket.Expiration;
             }
             //把準(zhǔn)備好的cookie加入到響應(yīng)流中
             Response.Cookies.Add(cookie);

             //轉(zhuǎn)發(fā)到請(qǐng)求的頁(yè)面
             Response.Redirect(FormsAuthentication.GetRedirectUrl(um.Name,false));
            }
            else
            {
             ClientScriptManager csm = this.Page.ClientScript;
             csm.RegisterStartupScript(this.GetType(), "error_tip", "alert('用戶(hù)名或密碼錯(cuò)誤!身份驗(yàn)證失敗!');", true);
            }
        }    
        //驗(yàn)證用戶(hù)
        private UserModel ValidUser(string name, string password)
        {
            return new UserService().Validate(name, password);
        }

    4、給網(wǎng)站添加處理程序Global.asax,其中通用身份驗(yàn)證代碼如下:
復(fù)制代碼 代碼如下:
        //改造原來(lái)的User,給其添加一個(gè)用戶(hù)所屬的角色數(shù)據(jù)
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            if (HttpContext.Current.User != null )
            {
                if (HttpContext.Current.User.Identity.IsAuthenticated)
                {
                    if (HttpContext.Current.User.Identity is FormsIdentity)
                    {
                        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                        FormsAuthenticationTicket ticket = id.Ticket;

                        string userData = ticket.UserData;
                        string[] roles = userData.Split(',');
                        //重建HttpContext.Current.User,加入用戶(hù)擁有的角色數(shù)組
                        HttpContext.Current.User = new GenericPrincipal(id, roles);
                    }
                }
            }
        }

    5、在Admin目錄中Manager.ASPx頁(yè)面加載代碼如下:
復(fù)制代碼 代碼如下:
        protected void Page_Load(object sender, EventArgs e)
        {
            //判斷通過(guò)身份驗(yàn)證的用戶(hù)是否有權(quán)限訪問(wèn)本頁(yè)面
            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
            //判斷通過(guò)身份驗(yàn)證的用戶(hù)是否是Admin角色
            if (!id.Ticket.UserData.Contains("Admin"))
            {
                //跳轉(zhuǎn)到訪問(wèn)權(quán)限不夠的錯(cuò)誤提示頁(yè)面
                Response.Redirect("~/Error/AccessError.htm", true);
            }
        }
        //安全退出按鈕的代碼
        protected void btnExit_Click(object sender, EventArgs e)
        {
            //注銷(xiāo)票據(jù)
            FormsAuthentication.SignOut();
            ClientScriptManager csm = this.Page.ClientScript;
            csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert('您已經(jīng)安全退出了!');", true);
        }

    6、在Users目錄中Welcome.ASPx頁(yè)面加載代碼如下:
復(fù)制代碼 代碼如下:
        protected void Page_Load(object sender, EventArgs e)
        {
            //判斷通過(guò)身份驗(yàn)證的用戶(hù)是否有權(quán)限訪問(wèn)本頁(yè)面
            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
            //判斷通過(guò)身份驗(yàn)證的用戶(hù)是否是User角色
            if (!id.Ticket.UserData.Contains("User"))
            {
                //跳轉(zhuǎn)到訪問(wèn)權(quán)限不夠的錯(cuò)誤提示頁(yè)面
                Response.Redirect("~/Error/AccessError.htm", true);
            }
        }
        //安全退出按鈕的代碼
        protected void btnExit_Click(object sender, EventArgs e)
        {
            //注銷(xiāo)票據(jù)
            FormsAuthentication.SignOut();
            ClientScriptManager csm = this.Page.ClientScript;
            csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert('您已經(jīng)安全退出了!');", true);
        }

測(cè)試結(jié)果:
    數(shù)據(jù):
        假設(shè)有3個(gè)用戶(hù),如下:
        ------------------------------------------
        用戶(hù)名        密碼        角色字符串
        ------------------------------------------
        sa        sa        Admin,User
        admin        admin        Admin
        user        user        User
        ------------------------------------------
    測(cè)試:
        如果使用admin登錄,只能訪問(wèn)Admin目錄的Manager.ASPx頁(yè)面;
        如果使用user登錄,只能訪問(wèn)Users目錄的Welcome.ASPx頁(yè)面;
        使用sa登錄,既能訪問(wèn)Admin目錄的Manager.ASPx頁(yè)面,又能訪問(wèn)Users目錄的Welcome.ASPx頁(yè)面。
    注意:測(cè)試時(shí)注意及時(shí)點(diǎn)擊安全退出按鈕,否則影響測(cè)試結(jié)果。

AspNet技術(shù)asp.net Forms身份驗(yàn)證和基于角色的權(quán)限訪問(wèn),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 午夜欧美性视频在线播放 | 99久久无色码中文字幕 | 日本高清一区二区三区水蜜桃 | 天堂成人精品视频在线观 | 黄网在线免费 | 激情五月六月婷婷 | 天天伊人网 | 国产视频国产 | 999热成人精品国产免 | 依人成人 | 日韩一区精品 | 一本久道久久综合中文字幕 | 91先生在线| 亚洲欧美激情图片 | 亚洲激情在线播放 | 国产视频精品免费 | 五月天激情综合网 | 玖玖国产精品 | 探花在线播放 | 91精品免费在线观看 | 免费女人扒开下面无遮挡 | 成人美女免费网站视频 | bt7086福利一区二区三区最新 | 久久99精品国产99久久 | 欧美黄色网页 | 国内精品久久久久久影院8f | 成人在线观看午夜 | 久久国产小视频 | 国产色在线观看 | 亚洲综合伊人 | 日本狠狠操 | 四虎在线最新地址4hu | 国产小视频福利 | 久久首页 | 尤物yw午夜国产精品视频 | 亚洲一级毛片免费看 | 天天拍夜夜添久久精品中文 | 99视频都是精品热在线播放 | 视频一区二区三区在线 | 伊人久久久久久久久久 | 中国女人真人一级毛片 |