ASP.NET基于角色的窗体安全认证机制
来源:互联网 发布:知柏地黄丸吃多久为好 编辑:程序博客网 时间:2024/04/30 15:48
一言不合就上demo
第一步:数据库建表测试用
Create DATABASE WebSolutionGOUSE [WebSolution]GO/****** 对象: Table [dbo].[Users] 脚本日期: 02/15/2012 15:16:22 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[Users]([ID] [int] IDENTITY(1,1) NOT NULL,[UserName] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,[Password] [nvarchar](150) COLLATE Chinese_PRC_CI_AS NULL,[UserRoles] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT [PK__Users__00551192] PRIMARY KEY CLUSTERED ([ID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]
第二步: 编写代码
创建一个空解决方案,添加一个WEB应用程序,应用程序下面有 login.aspx 、default.aspx、webForm1、Global.asax、webconfig。
文件夹Admin、User。具体如下图
Login.aspx界面Button1_Click事件代码如下:
string strcon = "Data Source=.;Initial Catalog=WebSolution;Persist Security Info=True;User ID=sa;Password=123;"; protected void Button1_Click(object sender, EventArgs e) { FormsAuthentication.Initialize(); SqlConnection conn = new SqlConnection(strcon); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select UserRoles from Users where userName=@username" +" and Password=@password "; cmd.Parameters.Add("@username", SqlDbType.NVarChar, 100).Value = this.TextBox1.Text; cmd.Parameters.Add("@password", SqlDbType.NVarChar, 150).Value = FormsAuthentication.HashPasswordForStoringInConfigFile(this.TextBox2.Text, "md5"); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,'用户名', DateTime.Now, DateTime.Now.AddMinutes(1), true,'角色名称', FormsAuthentication.FormsCookiePath); string strticket = FormsAuthentication.Encrypt(ticket); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strticket); if (ticket.IsPersistent) cookie.Expires = ticket.Expiration; Response.Cookies.Add(cookie); string returnUrl = Request.QueryString["ReturnUrl"]; if (returnUrl == null) { returnUrl = "./"; } Response.Redirect(returnUrl); this.Label3.Text = "登陆成功"; } else { this.Label3.Text = "用户名或者密码错误,请重试!"; } reader.Close(); conn.Close(); }
Default.aspx Page_Load 事件代码如下:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (User.IsInRole("Administrator")) { Response.Write("你好管理员"); } else if (User.IsInRole("User")) { Response.Write("你好会员"); } } }
下一步,我们需要修改 Global.asax 文件。如果你的Web应用程序没有这个文件,请右键单击Web应用项目,选择 "添加->添加新项...->Global Application Class"。在 Global.asax 或者 Global.asax.cs 中,找到叫做 Application_AuthenticationRequest 的方法(函数)。先要确认已经包含或者使用了 System.Security.Principal 以及 System.Web.Security 命名空间,然后修改它,修改后的代码:
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 = new GenericPrincipal(id, roles); } } }}
接下来,在Web应用程序根目录下的 Web.config 文件中找到 <system.web> 节点下
<authentication mode="Forms"> <forms loginUrl="Login.aspx" name=".AMUHOUSE.ASPXAUTH" defaultUrl="Default.aspx" protection="All" path="/"> </forms> </authentication> <authorization> <deny users="?" /> </authorization>
接下来,在Admin、User文件夹下各添加一个webconfig配置文件
在Admin文件下 <system.web>节点插入代码如下:
<authorization> <!-- 注意!下面几行的顺序和大小写是非常重要的! --> <allow roles="Administrator"/> <deny users="*"/> </authorization>
在User文件下 <system.web>节点插入代码如下:
<authorization> <!-- 注意!下面几行的顺序和大小写是非常重要的! --> <allow roles="User"/> <deny users="*"/> </authorization>
然后再分别在两个文件夹下添加几张图片用来测试用户角色权限,现在代码基本完工。
还有一种方法形式:
设置info.aspx只有Administrator的角色才可以访问。在根目录的web.config下<system.web>标签下面增加如下配置:
<location path="Info.aspx"> <system.web> <authorization> <allow roles="Administrator"/> <deny users="*" /> </authorization> </system.web> </location>
表示info.aspx只有administrator角色的会员才能访问。当然如果你想实现文件夹的授权设置,和上面的设置类似在那个文件夹下面的web.config配置一下即可。
第三步:测试
测试用户名密码分别为 (用户名:admin 密码: pwd123 权限:管理员)(用户名:lisaisai 密码:pwd123 权限:普通会员 )
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- ASP.NET基于角色的窗体安全认证机制
- 关于新手最容易上手的ASP.NET基于角色的窗体安全认证机制 Demo
- ASP.NET 中基于角色的窗体身份验证的研究
- 利用ASP.NET框架制作基于角色的安全登陆
- 利用ASP.NET框架制作基于角色的安全登陆
- Asp.net的安全认证
- ASP.NET 的安全认证
- asp.net mvc3.0通过窗体进行用户的验证(基于角色)
- 初识ASP.NET MVC窗体验证与权限过滤---2.基于角色的访问控制
- 一套基于asp.net的安全校验机制应用模型 !
- Qt静态库下载与安装说明
- windos系统下通过优盘安装Ubuntu14.04系统
- Android实现信息安全中凯撒密码技术
- 静态储存
- swift-struct
- ASP.NET基于角色的窗体安全认证机制
- ShellBash简单入门
- Web前端性能优化(八)配置ETag
- 解决ubuntu下深度音乐和wine程序托盘图标的问题
- 欢迎使用CSDN-markdown编辑器
- 0.附录
- 1013
- 关于文件目录线程级深度优先搜索效率的研究
- Dijkstra算法(单源最短路问题)