爲了更好地讓應用系統進行調用,有的時候須要對接口進行封裝,把複雜的東西包起來,讓應用系統接口開發者感受越簡單越好。這樣你的系統才更容易被推廣或應用。好比,如今的不少在線支付接口都提供了軟件開發包。咱們也能夠經過封裝來實現接口開發包,讓開發人員簡單開發,輕鬆調用。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》一書
李天平 編著
電子工業出版社出版