为了更好地让应用系统进行调用,有的时候须要对接口进行封装,把复杂的东西包起来,让应用系统接口开发者感受越简单越好。这样你的系统才更容易被推广或应用。好比,如今的不少在线支付接口都提供了软件开发包。咱们也能够经过封装来实现接口开发包,让开发人员简单开发,轻松调用。api
咱们添加一个SSOLib类库项目,提供对应用系统接口代码的封装,从而使其余应用系统经过调用该类库,便可实现接入认证服务中心。SSOLib类库项目如图18-17所示,详细代码请参考本书配套光盘。服务器
图18-17 SSOClass类库项目app
l Assistant类:辅助工具类。ide
l DESEncrypt类:加密/解密处理类。工具
l SynPageBase类:(接收认证中心)状态同步页面的基类,在应用系统中建立一个空白页面继承该类,便可实现同步功能。this
l ValidatePageBase类:当前应用系统验证页面的基类。应用系统中的任一页面经过继承该类,均可实现对用户状态的验证功能。加密
下面看一下如何经过调用上面封装过的类库,来实现接入认证服务中心实现单点登陆功能。spa
(1)在Web.config里设定环境参数:继承
<appSettings>接口
<!--认证服务器验证请求地址-->
<add key="ServiceValidate" value="http://localhost:2999/Validate.aspx"/>
<!--认证服务器域名地址-->
<add key="ServiceUrl" value="http://localhost:2999"/>
<!--分配给应用系统的API代码-->
<add key="apikey" value="642386db7bf249018117e643522d6a05"/>
<!--是否加密传递 -->
<add key="IsEncrypt" value="false"/>
<!--加密密钥-->
<add key="EncryptKey" value="litianping"/>
</appSettings>
(2)在Global.asax.cs中Session_Start添加:
protected void Session_Start(object sender, EventArgs e)
{
this.Session.Add("UserID", 0);
this.Session.Add("Pass", false);
this.Session.Add("Security", "");
this.Session.Add("Url", "");
}
(3)引用组件SSOLib.DLL,如图18-18所示。
图18-18 引用组件SSOLib.DLL
(4)用户身份认证,验证当前状态。
将要进行验证的页面(AnyPage)基类由System.Web.UI.Page改成 SSOLib.ValidatePage。
(5)接收认证服务器的返回信息进行状态同步。
在项目中增长一个空白页面Synchronous.aspx,将页面基类继承自SSOLib.SynPageBase。
(6)更新认证服务器,保持Service认证服务器Session状态。
添加一个用户控件SynServerIFrame.ascx实现以下代码,并拖到全部的页面上。
<iframe width=0 height=0 src='<%= ServiceUrl%>/SessionState.aspx'></iframe>
SynServerIFrame.ascx.cs代码以下:
public partial class SynServerIFrame : System.Web.UI.UserControl
{
public string ServiceUrl = ConfigurationSettings.AppSettings["ServiceUrl"];
}
(7)注销当前应用系统的登陆。
Session.Clear();
Session.Abandon();
(8)注销全部应用系统的登陆。
直接转向服务器注销页面便可:
Response.Redirect(ConfigurationSettings.AppSettings["ServiceUrl"] +
"/logout.aspx");
经过上面方式的调用,应用系统的开发工做量大大减小,几分钟就能够实现了。固然,这里不单单是教给你们几行代码,更重要的是一种思想,一种为客户着想的思想。
本文节选自《项目中的.NET》一书
李天平 编著
电子工业出版社出版