国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
ASP.NET實(shí)現(xiàn)不同用戶使用不同登錄界面

很多用戶在開發(fā) ASP.NET 應(yīng)用程序時都有這樣的需求:管理員角色的賬戶使用管理員的登錄界面進(jìn)行登錄,普通用戶角色的賬戶使用普通用戶的登錄界面進(jìn)行登錄。由于ASP.NET的web.config里只能使用一個 authentication mode="Forms" 節(jié)點(diǎn),所以,要實(shí)現(xiàn)不同用戶采用不同的登錄界面,一個辦法就是創(chuàng)建一個管理員專用的虛擬目錄,并設(shè)置為應(yīng)用程序來實(shí)現(xiàn)。下面介紹另外一種采用重定向的辦法來解決這個問題。

本文介紹的方法原理是根據(jù)登錄界面的返回地址進(jìn)行判斷,然后重定向到不同的頁面。下面就是實(shí)現(xiàn)的詳細(xì)過程。

1,創(chuàng)建一個網(wǎng)站,在網(wǎng)站里創(chuàng)建Admin文件夾和User文件夾,分別存放admin和普通用戶所使用的文件。也可以只設(shè)置一個 Admin 文件夾。由于本方法采用的判斷返回路徑的方法,所以,要能從路徑中區(qū)分出哪些是admin用戶使用的文件夾。當(dāng)然,采用其他的判斷方法也是可以的。

2,在網(wǎng)站根目錄下分別創(chuàng)建3個登錄文件:Login.aspx、UserLogin.aspx和AdminLogin.aspx。其中Login.aspx文件起地址轉(zhuǎn)換的作用,Login.aspx文件的主要內(nèi)容:

  1. protected void Page_Load(object sender, EventArgs e)   
  2. {   
  3. String ReturnUrl = Request.QueryString["ReturnUrl"];   
  4. if (ReturnUrl == null || ReturnUrl.Equals(String.Empty))   
  5. {   
  6. //默認(rèn)情況下,按普通用戶進(jìn)行登錄   
  7. Response.Redirect("~/UserLogin.aspx");   
  8. }   
  9. else   
  10. {   
  11. if (ReturnUrl.ToLower().Contains("/admin/"))   
  12. {   
  13. Response.Redirect("~/AdminLogin.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl));   
  14. }   
  15. else   
  16. {   
  17. Response.Redirect("~/UserLogin.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl));   
  18. }   

在這個文件的代碼中,如果ReturnUrl中含有"/admin/",就重定向到AdminLogin.aspx登錄界面;否則,就重定向到 UserLogin.aspx 登錄界面。

UserLogin.aspx這個文件的內(nèi)容如下:

  1. <%@ Page Language="C#" %>   
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  4. <mce:script runat="server"><!--   
  5. protected void Button1_Click(object sender, EventArgs e)   
  6. {   
  7. //密碼驗(yàn)證過程在此省略,假如用戶名是mxh,密碼是mengxianhui   
  8. String UserName = "mxh";   
  9. FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,//票證的版本號   
  10. UserName,//與身分驗(yàn)證票關(guān)聯(lián)的用戶名   
  11. DateTime.Now, //票證發(fā)出時的本地日期和時間   
  12. DateTime.Now.AddHours(1),//票證過期的本地日期和時間   
  13. true,// 如果票證存儲在持久性cookie中(跨瀏覽器會話保存)則為 true 否則為false 如果票證儲存在URL中,將忽略此值   
  14. "reader",//儲存在票證中持定的用戶信息,本頁面供 reader 登錄使用   
  15. FormsAuthentication.FormsCookiePath //票證儲存在cookie中的路徑   
  16. );   
  17. //如果 forms 元素的 protection 屬性設(shè)置為 All 或 Encryption,則窗體身份驗(yàn)證使用 Encrypt 方法對窗體身份驗(yàn)證票進(jìn)行加密和簽名。   
  18. string encTicket = FormsAuthentication.Encrypt(ticket);   
  19. HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);   
  20. Response.Cookies.Add(cookie);   
  21. Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, true));   
  22. }   
  23. // --></mce:script>   
  24. <html xmlns="http://www.w3.org/1999/xhtml">   
  25. <head runat="server">   
  26. <title>孟憲會之多用戶登錄測試頁面</title>   
  27. </head>   
  28. <body>   
  29. <form id="form1" runat="server">   
  30. 普通用戶登錄界面省略<br />   
  31. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="普通用戶登錄" />   
  32. </form>   
  33. </body>   
  34. </html>   
  35. <%@ Page Language="C#" %>   
  36. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  37. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  38. <mce:script runat="server"><!--   
  39. protected void Button1_Click(object sender, EventArgs e)   
  40. {   
  41. //密碼驗(yàn)證過程在此省略,假如用戶名是mxh,密碼是mengxianhui   
  42. String UserName = "mxh";   
  43. FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,//票證的版本號   
  44. UserName,//與身分驗(yàn)證票關(guān)聯(lián)的用戶名   
  45. DateTime.Now, //票證發(fā)出時的本地日期和時間   
  46. DateTime.Now.AddHours(1),//票證過期的本地日期和時間   
  47. true,// 如果票證存儲在持久性cookie中(跨瀏覽器會話保存)則為 true 否則為false 如果票證儲存在URL中,將忽略此值   
  48. "reader",//儲存在票證中持定的用戶信息,本頁面供 reader 登錄使用   
  49. FormsAuthentication.FormsCookiePath //票證儲存在cookie中的路徑   
  50. );   
  51. //如果 forms 元素的 protection 屬性設(shè)置為 All 或 Encryption,則窗體身份驗(yàn)證使用 Encrypt 方法對窗體身份驗(yàn)證票進(jìn)行加密和簽名。   
  52. string encTicket = FormsAuthentication.Encrypt(ticket);   
  53. HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);   
  54. Response.Cookies.Add(cookie);   
  55. Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, true));   
  56. }   
  57. // --></mce:script>   
  58. <html xmlns="http://www.w3.org/1999/xhtml">   
  59. <head runat="server">   
  60. <title>孟憲會之多用戶登錄測試頁面</title>   
  61. </head>   
  62. <body>   
  63. <form id="form1" runat="server">   
  64. 普通用戶登錄界面省略<br />   
  65. <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="普通用戶登錄" />   
  66. </form>   
  67. </body>   
  68. </html> 

這個文件將驗(yàn)證信息保存后,返回最初的請求頁面。注意:這里連接數(shù)據(jù)庫驗(yàn)證用戶名和密碼的過程省略過去了。

AdminLogin.aspx這個文件的全部內(nèi)容如下:

  1. <%@ Page Language="C#" %>   
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  4. <mce:script runat="server"><!--   
  5. protected void Button1_Click(object sender, EventArgs e)   
  6. {   
  7. //密碼驗(yàn)證過程在此省略,假如用戶名是Admin,密碼是mengxianhui   
  8. FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,//票證的版本號   
  9. "Admin",//與身分驗(yàn)證票關(guān)聯(lián)的用戶名   
  10. DateTime.Now, //票證發(fā)出時的本地日期和時間   
  11. DateTime.Now.AddHours(1),//票證過期的本地日期和時間   
  12. true,// 如果票證存儲在持久性cookie中(跨瀏覽器會話保存)則為 true 否則為false 如果票證儲存在URL中,將忽略此值   
  13. "admin|manager|editor",//儲存在票證中持定的用戶信息,本頁面供 admin,manager,editor登錄使用   
  14. FormsAuthentication.FormsCookiePath //票證儲存在cookie中的路徑   
  15. );   
  16. //如果 forms 元素的 protection 屬性設(shè)置為 All 或 Encryption,則窗體身份驗(yàn)證使用 Encrypt 方法對窗體身份驗(yàn)證票進(jìn)行加密和簽名。   
  17. string encTicket = FormsAuthentication.Encrypt(ticket);   
  18. HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);   
  19. Response.Cookies.Add(cookie);   
  20. Response.Redirect(FormsAuthentication.GetRedirectUrl("Admin", true));   
  21. }   
  22. // --></mce:script>   
  23. <html xmlns="http://www.w3.org/1999/xhtml">   
  24. <head runat="server">   
  25. <title>孟憲會之多用戶登錄測試頁面</title>   
  26. </head>   
  27. <body>   
  28. <form id="form1" runat="server">   
  29. 管理員登錄界面,省略   
  30. <asp:Button ID="Button1" runat="server" Text=" 登 錄 " OnClick="Button1_Click" />   
  31. </form>   
  32. </body>   
  33. </html>   
  34. <%@ Page Language="C#" %>   
  35. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  36. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  37. <mce:script runat="server"><!--   
  38. protected void Button1_Click(object sender, EventArgs e)   
  39. {   
  40. //密碼驗(yàn)證過程在此省略,假如用戶名是Admin,密碼是mengxianhui   
  41. FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2,//票證的版本號   
  42. "Admin",//與身分驗(yàn)證票關(guān)聯(lián)的用戶名   
  43. DateTime.Now, //票證發(fā)出時的本地日期和時間   
  44. DateTime.Now.AddHours(1),//票證過期的本地日期和時間   
  45. true,// 如果票證存儲在持久性cookie中(跨瀏覽器會話保存)則為 true 否則為false 如果票證儲存在URL中,將忽略此值   
  46. "admin|manager|editor",//儲存在票證中持定的用戶信息,本頁面供 admin,manager,editor登錄使用   
  47. FormsAuthentication.FormsCookiePath //票證儲存在cookie中的路徑   
  48. );   
  49. //如果 forms 元素的 protection 屬性設(shè)置為 All 或 Encryption,則窗體身份驗(yàn)證使用 Encrypt 方法對窗體身份驗(yàn)證票進(jìn)行加密和簽名。   
  50. string encTicket = FormsAuthentication.Encrypt(ticket);   
  51. HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);   
  52. Response.Cookies.Add(cookie);   
  53. Response.Redirect(FormsAuthentication.GetRedirectUrl("Admin", true));   
  54. }   
  55. // --></mce:script>   
  56. <html xmlns="http://www.w3.org/1999/xhtml">   
  57. <head runat="server">   
  58. <title>孟憲會之多用戶登錄測試頁面</title>   
  59. </head>   
  60. <body>   
  61. <form id="form1" runat="server">   
  62. 管理員登錄界面,省略   
  63. <asp:Button ID="Button1" runat="server" Text=" 登 錄 " OnClick="Button1_Click" />   
  64. </form>   
  65. </body>   
  66. </html> 

注意:這里連接數(shù)據(jù)庫驗(yàn)證用戶名和密碼的過程省略過去了。

3,在Global的AuthenticateRequest 事件(一定要注意:不是 AuthorizeRequest 事件)里將角色信息附加到當(dāng)前用戶的上下文中。

  1. protected void Application_AuthenticateRequest(object sender, EventArgs e)   
  2. {   
  3. string cookieName = FormsAuthentication.FormsCookieName;   
  4. HttpCookie authCookie = Context.Request.Cookies[cookieName];   
  5. if (null == authCookie)   
  6. {   
  7. return;   
  8. }   
  9. FormsAuthenticationTicket authTicket = null;   
  10. try   
  11. {   
  12. authTicket = FormsAuthentication.Decrypt(authCookie.Value);   
  13. }   
  14. catch (Exception ex)   
  15. {   
  16. return;   
  17. }   
  18. if (null == authTicket)   
  19. {   
  20. return;   
  21. }   
  22.  
  23. FormsIdentity id = new FormsIdentity(authTicket);   
  24. String[] roles = id.Ticket.UserData.Split('|'); //讀出在登錄時設(shè)置的角色列表。   
  25. System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, roles);   
  26. Context.User = principal;//將驗(yàn)證信息附加到當(dāng)前用戶上下文。   
  27. }   
  28. protected void Application_AuthenticateRequest(object sender, EventArgs e)   
  29. {   
  30. string cookieName = FormsAuthentication.FormsCookieName;   
  31. HttpCookie authCookie = Context.Request.Cookies[cookieName];   
  32. if (null == authCookie)   
  33. {   
  34. return;   
  35. }   
  36. FormsAuthenticationTicket authTicket = null;   
  37. try   
  38. {   
  39. authTicket = FormsAuthentication.Decrypt(authCookie.Value);   
  40. }   
  41. catch (Exception ex)   
  42. {   
  43. return;   
  44. }   
  45. if (null == authTicket)   
  46. {   
  47. return;   
  48. }   
  49.  
  50. FormsIdentity id = new FormsIdentity(authTicket);   
  51. String[] roles = id.Ticket.UserData.Split('|'); //讀出在登錄時設(shè)置的角色列表。   
  52. System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, roles);   
  53. Context.User = principal;//將驗(yàn)證信息附加到當(dāng)前用戶上下文。   

 4,在web.config文件中,允許登錄文件的匿名訪問,以便在未登錄的情況下顯示登錄界面,注意:如果包含圖片、css等文件,也需要設(shè)置這些資源允許匿名訪問。

  1. <configuration>   
  2. <location path="AdminLogin.aspx">   
  3. <system.web>   
  4. <authorization>   
  5. <allow users="?"/>   
  6. </authorization>   
  7. </system.web>   
  8. </location>   
  9. <location path="UserLogin.aspx">   
  10. <system.web>   
  11. <authorization>   
  12. <allow users="?"/>   
  13. </authorization>   
  14. </system.web>   
  15. </location>   
  16. <system.web>   
  17. <authentication mode="Forms">   
  18. <forms loginUrl="Login.aspx" path="/" protection="Encryption"></forms>   
  19. </authentication>   
  20. <authorization>   
  21. <deny users="?"/>   
  22. <allow users="*"/>   
  23. </authorization>   
  24. </system.web>   
  25. </configuration>   
  26. <configuration>   
  27. <location path="AdminLogin.aspx">   
  28. <system.web>   
  29. <authorization>   
  30. <allow users="?"/>   
  31. </authorization>   
  32. </system.web>   
  33. </location>   
  34. <location path="UserLogin.aspx">   
  35. <system.web>   
  36. <authorization>   
  37. <allow users="?"/>   
  38. </authorization>   
  39. </system.web>   
  40. </location>   
  41. <system.web>   
  42. <authentication mode="Forms">   
  43. <forms loginUrl="Login.aspx" path="/" protection="Encryption"></forms>   
  44. </authentication>   
  45. <authorization>   
  46. <deny users="?"/>   
  47. <allow users="*"/>   
  48. </authorization>   
  49. </system.web>   
  50. </configuration> 

5,這樣,當(dāng)訪問admin文件夾下的內(nèi)容時,會直接轉(zhuǎn)到AdminLogin.aspx界面。在登錄之后,就可以在/Admin/文件夾下的頁面中使用下面的方法得到當(dāng)前登錄的用戶名和所具有的角色,根據(jù)角色來判斷當(dāng)前用戶是否有權(quán)操作:

  1. Response.Write("<li>當(dāng)前登錄用戶 = " + Page.User.Identity.Name);   
  2. Response.Write("<li>admin = " + Page.User.IsInRole("admin"));   
  3. Response.Write("<li>reader = " + Page.User.IsInRole("reader"));   
  4. Response.Write("<li>當(dāng)前登錄用戶 = " + Page.User.Identity.Name);   
  5. Response.Write("<li>admin = " + Page.User.IsInRole("admin"));   
  6. Response.Write("<li>reader = " + Page.User.IsInRole("reader")); 

為了簡單起見,可以寫一個Admin使用的基類頁面,統(tǒng)一在基類頁面中進(jìn)行權(quán)限的處理。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
webconfig權(quán)限控制(轉(zhuǎn))
FormsAuthentication使用指南
翻譯:Single Sign-On for Everyone - Anders Liu的.NET空間 - 博客園
Asp
細(xì)說ASP.NET Forms身份認(rèn)證
簡單配置authentication,完成基于表單的身份驗(yàn)證
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服