很多用户在开发 ASP.NET
应用程序时都有这样的需求:管理员角色的账户使用管理员的登录界面进行登录,普通用户角色的账户使用普通用户的登录界面进行登录。由于ASP.NET的
web.config里只能使用一个 authentication mode="Forms"
节点,所以,要实现不同用户采用不同的登录界面,一个办法就是创建一个管理员专用的虚拟目录,并设置为应用程序来实现。下面介绍另外一种采用重定向的办法
来解决这个问题。
本文介绍的方法原理是根据登录界面的返回地址进行判断,然后重定向到不同的页面。下面就是实现的详细过程。
1,创建一个网站,在网站里创建Admin文件夹和User文件夹,分别存放admin和普通用户所使用的文件。也可以只设置一个 Admin
文件夹。由于本方法采用的判断返回路径的方法,所以,要能从路径中区分出哪些是admin用户使用的文件夹。当然,采用其他的判断方法也是可以的。
2,在网站根目录下分别创建3个登录文件:Login.aspx、UserLogin.aspx和AdminLogin.aspx。其中
Login.aspx文件起地址转换的作用,
Login.aspx文件的主要内容:
- protected void Page_Load( object sender, EventArgs e)
- {
- String ReturnUrl = Request.QueryString["ReturnUrl" ];
- if (ReturnUrl == null || ReturnUrl.Equals(String.Empty))
- {
- //默认情况下,按普通用户进行登录
- Response.Redirect("~/UserLogin.aspx" );
- }
- else
- {
- if (ReturnUrl.ToLower().Contains( "/admin/" ))
- {
- Response.Redirect("~/AdminLogin.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl));
- }
- else
- {
- Response.Redirect("~/UserLogin.aspx?ReturnUrl=" + Server.UrlEncode(ReturnUrl));
- }
- }
在这个文件的代码中,如果ReturnUrl中含有"/admin/",就重定向到AdminLogin.aspx登录界面;否则,就重定向到
UserLogin.aspx 登录界面。
UserLogin.aspx这个文件的内容如下:
- <%@ Page Language= "C#" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
- <mce:script runat="server" ><!--
- protected void Button1_Click( object sender, EventArgs e)
- {
- //密码验证过程在此省略,假如用户名是mxh,密码是mengxianhui
- String UserName = "mxh" ;
- FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, //票证的版本号
- UserName,//与身分验证票关联的用户名
- DateTime.Now, //票证发出时的本地 日期和时间
- DateTime.Now.AddHours(1),//票证过期的本地日期和时间
- true , // 如果票证存储在持久性cookie中(跨浏览器会话保存)则为 true 否则为false 如果票证储存在 URL中,将忽略此值
- "reader" , //储存在 票证中持定的用户信息,本页面供 reader 登录使用
- FormsAuthentication.FormsCookiePath //票证储存在cookie中的路径
- );
- //如果 forms 元素的 protection 属性设置为 All 或 Encryption,则窗体身份验证 使用 Encrypt 方法对窗体身份验证票进行加密和签名。
- string encTicket = FormsAuthentication.Encrypt(ticket);
- HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
- Response.Cookies.Add(cookie);
- Response.Redirect(FormsAuthentication.GetRedirectUrl(UserName, true ));
- }
- // --></mce:script>
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server" >
- <title>孟宪会之多用户登录测试页面</title>
- </head>
- <body>
- <form id="form1" runat= "server" >
- 普通用户登录界面省略<br />
- <asp:Button ID="Button1" runat= "server" OnClick= "Button1_Click" Text= "普通用户登录" />
- </form>
- </body>
- </html>
这个文件将验证信息保存后,返回最初的请求页面。注意:这里连接数据库验证用户名和密码的过程省略过去了。
AdminLogin.aspx这个文件的全部内容如下:
- <%@ Page Language= "C#" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
- <mce:script runat="server" ><!--
- protected void Button1_Click( object sender, EventArgs e)
- {
- //密码验证过程在此省略,假如用户名是Admin,密码是mengxianhui
- FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, //票证的版本号
- "Admin" , //与身分验证票关联的用户名
- DateTime.Now, //票证发出时的本地日期和 时间
- DateTime.Now.AddHours(1),//票证过期的本地日期和时间
- true , // 如果票证存储在持久性cookie中(跨浏览器会话保存)则为 true 否则为false 如果票证储存在 URL中,将忽略此值
- "admin|manager|editor" , //储存在票证中持定的用户信息,本页面供 admin,manager,editor登录使用
- FormsAuthentication.FormsCookiePath //票证储存在cookie中的路径
- );
- //如果 forms 元素的 protection 属性设置为 All 或 Encryption,则窗体身份验证 使用 Encrypt 方法对窗体身份验证票进行加密和签名。
- string encTicket = FormsAuthentication.Encrypt(ticket);
- HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
- Response.Cookies.Add(cookie);
- Response.Redirect(FormsAuthentication.GetRedirectUrl("Admin" , true ));
- }
- // --></mce:script>
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server" >
- <title>孟宪会之多用户登录测试页面</title>
- </head>
- <body>
- <form id="form1" runat= "server" >
- 管理员登录界面,省略
- <asp:Button ID="Button1" runat= "server" Text= " 登 录 " OnClick= "Button1_Click" />
- </form>
- </body>
- </html>
注意:这里连接数据库验证用户名和密码的过程省略过去了。
3,在Global的AuthenticateRequest 事件(一定要注意:不是 AuthorizeRequest
事件)里将角色信息附加到当前用户的上下文中。
- protected void Application_AuthenticateRequest( object sender, EventArgs e)
- {
- string cookieName = FormsAuthentication.FormsCookieName;
- HttpCookie authCookie = Context.Request.Cookies[cookieName];
- if ( null == authCookie)
- {
- return ;
- }
- FormsAuthenticationTicket authTicket = null ;
- try
- {
- authTicket = FormsAuthentication.Decrypt(authCookie.Value);
- }
- catch (Exception ex)
- {
- return ;
- }
- if ( null == authTicket)
- {
- return ;
- }
- FormsIdentity id = new FormsIdentity(authTicket);
- String[] roles = id.Ticket.UserData.Split('|' ); //读出在登录时设 置的角色列表。
- System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, roles);
- Context.User = principal;//将验证信息 附加到当前用户上下文。
- }
4,在web.config文件中,允许登录文件的匿名访问,以便在未登录的情况下显示登录界面,注意:如果包含图片、css等文件,也需要设置这 些资源允许匿名访问。
- < configuration >
- < location path = "AdminLogin.aspx" >
- < system.web >
- < authorization >
- < allow users = "?" />
- </ authorization >
- </ system.web >
- </ location >
- < location path = "UserLogin.aspx" >
- < system.web >
- < authorization >
- < allow users = "?" />
- </ authorization >
- </ system.web >
- </ location >
- < system.web >
- < authentication mode = "Forms" >
- < forms loginUrl = "Login.aspx" path = "/" protection = "Encryption" > </ forms >
- </ authentication >
- < authorization >
- < deny users = "?" />
- < allow users = "*" />
- </ authorization >
- </ system.web >
- </ configuration >
5,这样,当访问admin文件夹下的内容时,会直接转到AdminLogin.aspx界面。在登录之后,就可以在/Admin/文件夹下的页面 中使用下面的方法得到当前登录的用户名和所具有的角色,根据角色来判断当前用户是否有权操作:
- Response.Write( "<li>当前登录用户 = " + Page.User.Identity.Name);
- Response.Write("<li>admin = " + Page.User.IsInRole( "admin" ));
- Response.Write("<li>reader = " + Page.User.IsInRole( "reader" ));
为了简单起见,可以写一个Admin使用的基类页面,统一在基类页面中进行权限的处理。
发表评论
-
C#实现http协议GET、POST请求
2011-03-16 23:43 4046using System; using System ... -
Asp.net模板引擎技术
2010-10-20 09:18 1186以前听我朋友说起php的模板引擎技术的时候似懂非懂哪 ... -
ASP.NET页面数据导出 excel表方法
2010-08-13 01:07 1352//1、由dataset生成 public void Cr ... -
详解C#委托,事件与回调函数
2010-06-09 01:25 1435.Net编程中最经常用的 ... -
C#与javascript简单交互
2010-06-08 19:36 20631.asp.net 呼叫js Response ... -
NET连接ORACLE数据库的方法及示例(转)
2010-03-07 09:30 4568.NET连接ORACLE数据库的方 ... -
dropdownlist绑定的二种方法
2010-02-26 22:57 925dropdownlist绑定的二种方法 ... -
正则表达式用例
2009-09-07 12:54 8241。^\d+$ //匹配非负整数(正整数 + 0) 2。^[ ... -
技术解析:什么是模式? 什么是框架?
2009-09-07 18:11 747技术解析:什么是模式 ... -
关于Gridview中使用控件和图片导出到Excel的处理
2009-09-28 01:04 1868首先是大家在网上能搜索一箩筐的仅导出数据的做法:view pl ...
相关推荐
在这个例子中,`asp.net使用Form认证实现用户登录 (LoginView的使用).pdf`文件很可能详细介绍了如何配置`LoginView`控件,以及如何结合Form认证来实现用户登录功能。文件可能涵盖了设置控件属性、处理登录事件、以及...
在这个“asp.net 后台管理系统界面”中,我们主要关注的是如何利用 ASP.NET 来设计和实现一套功能完善的后台管理界面。 后台管理系统界面是网站或应用程序的核心部分,它提供了管理员对数据、用户、权限等进行管理...
在本文中,我们将深入探讨如何使用ASP.NET(C#)技术来实现一个用户管理系统。ASP.NET是Microsoft开发的一个强大且灵活的Web应用程序框架,它允许开发者构建动态、数据驱动的Web应用。C#是一种现代、面向对象的编程...
在这个场景中,我们看到的是一个简单的用户登录界面的实现,它涉及到HTML、CSS、JavaScript以及后端的ASP.NET代码。 首先,我们来看HTML部分,这是用户在浏览器中看到的界面。HTML代码定义了一个表单,包含了两个...
ASP.NET登录程序是基于微软的ASP.NET框架构建的Web应用程序,用于实现用户的身份验证和授权。这个程序的核心功能包括用户注册和登录,涉及到的关键技术主要包括ASP.NET Web Forms、页面生命周期管理、视图状态、...
在本实例中,我们将深入探讨ASP.NET的角色管理机制,以及如何在实际项目中实现这一功能。 首先,ASP.NET的角色管理涉及到两个主要概念:认证(Authentication)和授权(Authorization)。认证是指识别用户的身份,...
在"asp.net登录界面"这个主题中,我们将深入探讨如何使用ASP.NET来设计和实现一个用户登录系统。 一、ASP.NET登录基础 1. **Web表单与控件**:在ASP.NET中,登录界面通常由Web表单(.aspx页面)构成,包含文本框...
在ASP.NET中,常常使用SQL Server或SQLite作为后台数据库。 5. **身份管理**:ASP.NET Identity 是一个用于用户身份验证和授权的框架,它可以处理用户的注册、登录、密码重置等功能。在用户注册时,Identity会处理...
通过深入学习这个ASP.NET角色权限管理系统,你可以掌握如何构建安全的多用户应用,理解如何有效地实现用户登录、角色分配和权限控制,这对于开发企业级应用至关重要。同时,这也有助于提高你对ASP.NET框架和身份验证...
在ASP.NET中,这通常通过使用C#编程语言和ASP.NET Web Forms(ASPX)来实现。下面我们将深入探讨这个过程中的关键知识点。 1. **用户身份验证**: 用户身份验证是登录系统的核心,它涉及到检查用户提供的凭证是否...
5. **授权机制**:使用ASP.NET MVC的特性如[Authorize]或自定义授权过滤器,限制特定控制器或动作方法的访问,只有具备相应角色的用户才能执行。 6. **界面设计**:使用BootStrap创建用户界面,展示用户信息、角色...
ASP.NET用户登录注册模块是Web开发中不可或缺的一部分,它为网站提供身份验证和授权功能,确保只有经过验证的用户才能访问特定的受保护资源。在这个模块中,我们通常会涉及以下核心知识点: 1. **ASP.NET架构**:...
在这个"asp.net简单用户登录系统"中,我们将探讨如何利用ASP.NET的核心技术和组件来实现一个基本的用户登录功能,包括用户验证、会话管理以及页面跳转。 1. **用户验证**:用户登录系统的首要任务是对用户输入的...
4. **页面/操作级别的授权**:在ASP.NET中,可以使用特性(Attributes)来标记控制器或行动方法,限制只有特定角色或用户才能访问。 5. **数据库交互**:权限信息通常存储在数据库中,如AspNetUsers、AspNetRoles和...
在ASP.NET中,我们可以使用`Roles`类来管理角色,包括添加、删除角色以及将用户分配到特定角色。通过角色,我们可以方便地批量授予或撤销用户集中的权限。 4. **权限分配**:在用户权限管理中,权限通常定义为对...
综上所述,"ASP.NET做的用户注册界面"涵盖了前端交互、后端处理、数据验证、数据库操作、安全性实践以及用户体验等多个方面,是Web开发中的核心技能之一。通过掌握这些知识点,开发者可以构建出高效、安全的用户注册...
3. **身份验证与授权**:为了管理用户登录和权限,博客系统可能会实现ASP.NET的身份认证和授权机制。这包括使用Forms Authentication,通过Cookie管理用户会话,以及角色基础的访问控制,确保只有特定用户能访问某些...
在ASP.NET中,用户登录是Web应用程序的基本功能之一,它涉及到身份验证、授权以及安全性的管理。本例“用户登录举例”提供了多种编程语言的登录源代码,这将有助于开发者理解并实现自己的登录系统。 首先,ASP.NET...
【ASP.NET用户登录/管理模块】是基于微软的.NET框架,使用Visual Studio 2005集成开发环境和C#编程语言,与SQL Server 2005数据库结合实现的一个功能组件。该模块主要涉及以下几个核心知识点: 1. **ASP.NET基础**...
本文将深入探讨ASP.NET的安全体系结构,登录验证流程,以及页面请求流程,并详细介绍加密模块的实现方法。 ### ASP.NET安全体系结构 ASP.NET的安全体系结构主要基于身份验证(Authentication)和授权...