【IT168技术文档】
这段时间项目进入结束阶段,一直处于空闲状态,没事就把以前收集的一些代码研究了一下,发现ASP.NET真的是很强大,光一个web.config,我要真正透彻的了解它,还要花点功夫,刚刚稍微看了一下HttpModule, 做了个小程序,写下来,当作自己的学习笔记吧。
HttpModules实现了类似于ISAPI Filter的功能,在开发上,通常需要经过以下步骤:
1.编写一个类,实现IhttpModule接口
2.实现Init 方法,并且注册需要的方法
3.实现注册的方法
4.实现Dispose方法,如果需要手工为类做一些清除工作,可以添加Dispose方法的实现,但这不是必需的,通常可以不为Dispose方法添加任何代码。
5.在Web.config文件中,注册编写的类
关于Forms身份验证,网上的说明已经很多了,下面便开始做这个小小的角色控制程序。
首先新建asp.net项目,并添加Login.aspx, Index1.aspx,index1.aspx, default.aspx等页面。
添加一个存储用户信息的xml文件,在里面保存用户名,密码,用户角色等信息,类似这样:
然后在web.config文件中的system.web节点中,按照下面的代码修改authentication节点,将身份验证方式设置为forms身份验证,并将登陆页面设置为<UsersInfo> <user name="admin" password="admin" role="admin" /> <user name="user" password="user" role="user" /> </UsersInfo>
另外再按如下方式增加如下节点控制用户对页面的访问的控制:<authentication mode="Forms"> <forms name="TestAuth" loginUrl="Login.aspx" protection="None" timeout="60" /> </authentication>
接下来在login.aspx.cs中,加上对登陆button的click事件处理函数,这里我们在IsAuthenticated方法中检查用户名密码是否通过验证,并在通过验证后取得xml文件的roles信息,然后生成 FormsAuthenticationTicket,并将roles信息保存在ticket的userdata中,然后将ticket加入到客户端的 cookie中,同时重定向到用户最初请求的页面。<location path="Index1.aspx"> <system.web> <authorization> <deny users="?" roles="user"/> </authorization> </system.web> </location>
private void Button1_Click(object sender, System.EventArgs e) { if(this.IsAuthenticated(TextBox1.Text,TextBox2.Text)) { string userId = TextBox1.Text; FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,userId,DateTime.Now,DateTime.Now.AddSeconds(30),false,roles); HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,FormsAuthentication.Encrypt(ticket)); Response.Cookies.Add(cookie); Response.Redirect(FormsAuthentication.GetRedirectUrl(userId,false),true); } }