1.系统实现原理
用户在访问系统组件中的任何一个页面,系统都会转到登录界面,在用户登录后,系统会自动转会到客户上次请求的页面。并且用户此后可以在系统中无缝切换,不需要再次进行登录,实现了一站式登录。
系统实现步骤如下:
⑴ 用户访问应用系统。
⑵ 应用系统假如检查到用户没有在自己的服务器登录,则将用户请求重定向到用户认证中心上。
⑶ 用户认证中心验证用户的实时状态,假如用户没有登录,则自动转向认证中心的用户登录界面。假如已经登录,将用户标识及用户令牌,重定向回应用系统。
⑷ 用户认证中心验证用户身份后,生成用户令牌,重定向回应用系统。
⑸ 应用系统接收统一格式的用户令牌,取得用户在本系统上的登录账号,将用户在本系统上状态置为登录,返回用户请求访问的页面。
⑹ 假如用户在访问应用系统之前已经在应用系统登录服务器上登录过,第二步到第五步对用户来说就是透明的,用户感觉只是向应用系统发出了访问请求,然后得到了正确的页面反馈。
从上面的流程,我们可以知道,不管用户访问哪个应用系统,用户只需要一次登录,就保证用户在整个系统中的状态都是在线的,不再需要进行第二次登录。
2.系统实现要害代码
系统定义了三个Session变量:
UserID:标识用户身份;
Pass:标识用户即时状态;
Url:保存了上次请求的页面,以保证在用户登录后能转到用户请求的页面。
初始化时:
<tr><td>Protected void init() { Session.Add("UserID", 0); Session.Add("Pass", false); Session.Add("Url", ""); }</td></tr> </table>
对于验证过程,首先将传递过来的参数保存到Session中。如果用户没有登录,则转到Login.jsp页面进行登录。如果用户已经登录了。则将用户标识和用户令牌重定向到应用系统访问页面
<table borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1> <tr> <td> private void Validate(){ bool Pass = (bool)Session["Pass"]; if ((Request. GetString ["Url"] != null) && (Request.GetString["Url "] != "")) {Session["Url "] = Request.GetString["Url "]; } if (Pass) { string UserID = Session["UserID"].ToString(); string Url = Session["Url "].ToString(); Response.Redirect(Url+"/AppPage.jsp?UserID=" + UserID + "&Pass=True); } else {Response.Redirect("Login.jsp") } } </td> </tr> </table>
该登录系统具有以下几个特点:
⑴ 具备无缝连接功能。能够尽可能地利用现有系统的身份认证模块以及现有的用户设置和权限设置,尽量保护现有的投资,减少重新的用户设置和权限设置的费用,同时避免对现有系统进行大规模的修改。
⑵ 具有良好的扩展性。不仅能支持现有的应用系统及其现有的用户系统,当开发和部署新的应用组件时,这个系统服务可以作为它的身份认证模块的形式工作,也就是说,新的组件应用可以通过集成该服务的形式来实现等价的功能,不必再设计用户系统,。
⑶ 具备灵活的使用模式。此系统管理为用户提供多种登录手段,包括传统的口令登录或者配发用户身份卡,用户可以通过多种方式自由地使用该系统服务。为了提高系统安全性,又节约费用,我们采用USB存储设备,将个人的信息存储其中,进行登录认证,取得了良好的效果。