在 ASPNET 中实现不同角色的用户使用不同登录界面的方法文档格式.docx
《在 ASPNET 中实现不同角色的用户使用不同登录界面的方法文档格式.docx》由会员分享,可在线阅读,更多相关《在 ASPNET 中实现不同角色的用户使用不同登录界面的方法文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![在 ASPNET 中实现不同角色的用户使用不同登录界面的方法文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/1/6af1e2e4-deb4-43f6-a22f-793f2beebf55/6af1e2e4-deb4-43f6-a22f-793f2beebf551.gif)
protectedvoidPage_Load(objectsender,EventArgse)
{
StringReturnUrl=Request.QueryString["
ReturnUrl"
];
if(ReturnUrl==null||ReturnUrl.Equals(String.Empty))
//默认情况下,按普通用户进行登录
Response.Redirect("
~/UserLogin.aspx"
);
}
else
if(ReturnUrl.ToLower().Contains("
/admin/"
))
{
~/AdminLogin.aspx?
ReturnUrl="
+Server.UrlEncode(ReturnUrl));
}
else
~/UserLogin.aspx?
protectedvoidPage_Load(objectsender,EventArgse)
{
if(ReturnUrl==null||ReturnUrl.Equals(String.Empty))
//默认情况下,按普通用户进行登录
}
else
))
{
}
else
在这个文件的代码中,如果ReturnUrl中含有"
,就重定向到AdminLogin.aspx登录界面;
否则,就重定向到UserLogin.aspx登录界面。
UserLogin.aspx这个文件的内容如下:
&
lt;
%@PageLanguage="
C#"
%&
gt;
!
DOCTYPEhtmlPUBLIC"
-//W3C//DTDXHTML1.0Transitional//EN"
"
http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
mce:
scriptrunat="
server"
--
protectedvoidButton1_Click(objectsender,EventArgse)
//密码验证过程在此省略,假如用户名是mxh,密码是mengxianhui
StringUserName="
mxh"
;
FormsAuthenticationTicketticket=newFormsAuthenticationTicket(2,//票证的版本号
UserName,//与身分验证票关联的用户名
DateTime.Now,//票证发出时的本地日期和时间
DateTime.Now.AddHours
(1),//票证过期的本地日期和时间
true,//如果票证存储在持久性cookie中(跨浏览器会话保存)则为true否则为false如果票证储存在URL中,将忽略此值
reader"
//储存在票证中持定的用户信息,本页面供reader登录使用
FormsAuthentication.FormsCookiePath//票证储存在cookie中的路径
);
//如果forms元素的protection属性设置为All或Encryption,则窗体身份验证使用Encrypt方法对窗体身份验证票进行加密和签名。
stringencTicket=FormsAuthentication.Encrypt(ticket);
HttpCookiecookie=newHttpCookie(FormsAuthentication.FormsCookieName,encTicket);
Response.Cookies.Add(cookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName,true));
//--&
/mce:
script&
htmlxmlns="
//www.w3.org/1999/xhtml"
headrunat="
&
title&
孟宪会之多用户登录测试页面&
/title&
/head&
body&
formid="
form1"
runat="
普通用户登录界面省略&
br/&
asp:
ButtonID="
Button1"
OnClick="
Button1_Click"
Text="
普通用户登录"
/&
/form&
/body&
/html&
--
protectedvoidButton1_Click(objectsender,EventArgse)
//密码验证过程在此省略,假如用户名是mxh,密码是mengxianhui
FormsAuthenticationTicketticket=newFormsAuthenticationTicket(2,//票证的版本号
UserName,//与身分验证票关联的用户名
DateTime.Now,//票证发出时的本地日期和时间
DateTime.Now.AddHours
(1),//票证过期的本地日期和时间
true,//如果票证存储在持久性cookie中(跨浏览器会话保存)则为true否则为false如果票证储存在URL中,将忽略此值
//储存在票证中持定的用户信息,本页面供reader登录使用
FormsAuthentication.FormsCookiePath//票证储存在cookie中的路径
这个文件将验证信息保存后,返回最初的请求页面。
注意:
这里连接数据库验证用户名和密码的过程省略过去了。
AdminLogin.aspx这个文件的全部内容如下:
//密码验证过程在此省略,假如用户名是Admin,密码是mengxianhui
Admin"
//与身分验证票关联的用户名
admin|manager|editor"
//储存在票证中持定的用户信息,本页面供admin,manager,editor登录使用
Response.Redirect(FormsAuthentication.GetRedirectUrl("
true));
管理员登录界面,省略
登录"
//密码验证过程在此省略,假如用户名是Admin,密码是mengxianhui
//与身分验证票关联的用户名
//储存在票证中持定的用户信息,本页面供admin,manager,editor登录使用
管理员登录界面,省略
3,在Global的AuthenticateRequest事件(一定要注意:
不是AuthorizeRequest事件)里将角色信息附加到当前用户的上下文中。
protectedvoidApplication_AuthenticateRequest(objectsender,EventArgse)
stringcookieName=FormsAuthentication.FormsCookieName;
HttpCookieauthCookie=Context.Request.Cookies[cookieName];
if(null==authCookie)
return;
FormsAuthenticationTicketauthTicket=null;
try
authTicket=FormsAuthentication.Decrypt(authCookie.Value);
catch(Exceptionex)
if(null==authTicket)
FormsIdentityid=newFormsIdentity(authTicket);
String[]roles=id.Ticket.UserData.Split('
|'
//读出在登录时设置的角色列表。
System.Security.Principal.GenericPrincipalprincipal=newSystem.Security.Principal.GenericPrincipal(id,roles);
Context.User=principal;
//将验证信息附加到当前用户上下文。
protectedvoidApplication_AuthenticateRequest(objectsender,EventArgse)
if(null==authCookie)
try
catch(Exceptionex)
if(null==authTicket)
4,在web.config文件中,允许登录文件的匿名访问,以便在未登录的情况下显示登录界面,注意:
如果包含图片、css等文件,也需要设置这些资源允许匿名访问。
configuration&
locationpath="
AdminLogin.aspx"
system.web&
authorization&
allowusers="
?
"
/&
/authorization&
/system.web&
/location&
UserLogin.aspx"
authenticationmode="
formsloginUrl="
Login.aspx"
path="
/"
protection="
Encryption"
/forms&
/authentication&
denyusers="
*"