您的位置:首页 > 理论基础 > 计算机网络

4.2用户登陆和安全验证(利用HttpModule集中处理身份检查)

2008-05-20 06:40 471 查看
在线考试系统总共包括三种用户(学生、教师、管理员)。他们分别有自己的操作权限。而这些操作分别包含在不同的页面中。为了简单的划分。系统将三种用户的操作页面分别放到了不同的路径下。下图4-5是三个用户各自的文件夹内容。

namespace ExaminationSystem.BLL.Service

上面代码展示的是真实的代码实现。我们可以看到用面向对象的方式编写代码代码的易读性得到大大的提高。UserService类从泛型的抽象类AbstractService继承了基本的CRUD操作。下面看看该方法由于继承带来的通用性。由于Student、Teacher、Admin都继承自User所以我们的登陆方法可以适用于所以的用户。所以我们只需要有一个用户登陆页面就可以了.

下面是登陆页面的登陆按钮的事件处理函数的实现。

protected void LoginButton_Click(object sender, EventArgs e)

调用CheckLogin后只要判断返回的User具体是那个用户类型。然后跳转到相应用户的默认页面。之前有个Session["User"]
= user;可以看出系统是通过Session来记录用户的身份的。因为Session是服务器端的所以它比Cookie更加的安全。由于学生考试时间和教师管理工作需要很长的时间系统将Session的超时时间从默认20分钟调整到了2小时。如果需要可以在Web.config文件中继续调整。

有了登陆的实现下面介绍如何实现用户身份检查的。因为每个页面都必须有特定的身份才能访问。因为用户登陆后已经用Session记录了用户的身份。要想限制用户对某个页面的访问只要在该页面里取出Session里的用户对象看是否是要求的角色就行了。比如想让添加班级的页面只允许Admin来访问。可以在Class.aspx页面的Page_Load事件处理函数里判断用户权限。下面代码说明了如何来防止Class.aspx被其他用户访问。

protected void Page_Load(object sender, EventArgs e)

namespace ExaminationSystem.Web

我们首先在 Init方法中注册PostAcquireRequestState处理函数。因为在该事件中Session才可以被访问到。在事件处理函数中我们首先要检查Session和Request对象是否存在。如果存在。就继续检查用户请求的页面是否和自己拥有的身份一致。可以看到是根据请求URL中是否包含teacher,student,admin来判断用户请求的页面类型的。因为每个用户的可操作页面都在不同的文件夹下。所以检查用户请求页面类型时候只需要检查请求路径中是否包含特定名称就行了。比如请求http://localhost/exam/admin/admin.aspx因为请求中包含”/admin/”所以就可以知道必须要Admin权限参能访问该页面。然后我们检查Session中的用户对象是否是Admin类型。如果不是则将请求转到默认的登陆页面。这样就完成了用户的权限管理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐