上文中實現了直接連接數據庫的方式,通過配置文件,自定義的登錄界面單點登錄到通用權限管理系統的功能實現。這個方法不好的地方就是暴露了數據庫連接,對系統的安全有嚴重的隱患,最好不要用直接訪問數據庫的方式進行多系統的單點登錄,雖然這個比較簡單,但是安全隱患太大,核心的底層數據庫能接觸的人越少越好盡量防止沒必要的事情發生比較好,而且從多個系統登錄時,每次都輸入密碼也很鬧心。
上文地址如下: 通用權限管理系統組件 (GPM - General Permissions Manager) 中集成多系統的統一登錄(數據庫源碼級)附源碼
我們可以換個方式,建立統一的單點登錄門戶,然后所有的網站都登錄到這個頁面上,然后讀取統一的Cookies,當然Cookies也可以按自己的需要進行加密解密處理的。很多人可能都會講,你這個技術不行、安全性不行、這個那個的,其實有時候還真沒必要過度設計,很公司的多內部關系系統,外面的人進也進不來,再其次大家工作完成了,誰都懶得多上一會兒公司的各種內部系統,只要好用簡單就可以了,沒幾個人無聊了天天攻擊自己公司內部的系統。大家都想早點兒下班早點兒回家陪老婆孩子就完事了,何必給自己找那么多麻煩了。
而且有了源碼后,想怎么加密解密,想怎么改進都可以,可以按自己的個性要求改進個徹底都沒關系對吧。下面給大家參考一下,哪里覺得怎么做會更好就進行積極改進就ok了多聽聽大家的也沒錯,通用權限管理系統里的是如何實現多系統的統一單點登錄的,參考代碼如下:
// All Rights Reserved , Copyright (C) 2012 , Hairihan TECH, Ltd .
// -----------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DotNet.Utilities;
/// <summary>
/// _Default
/// 單點登錄的例子程序
///
/// 修改紀錄
///
/// 2012-01-29 版本:1.0 JiRiGaLa 整理實現多系統的統一退出功能。
///
/// 版本:1.0
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2012-01-29 </date>
/// </author>
/// </summary>
public partial class _Default : System.Web.UI.Page
{
private BaseUserInfo userInfo = null; // 當前操作員信息對象
public BaseUserInfo UserInfo
{
get
{
if (Session[ " UserInfo "] != null)
{
this.userInfo = (BaseUserInfo)Session[ " UserInfo "];
}
if ( this.userInfo == null)
{
// 從 Session 讀取 當前操作員信息
if (Session[ " UserInfo "] == null)
{
this.userInfo = new BaseUserInfo();
// 獲得IP 地址
this.userInfo.Id = string.Empty;
this.userInfo.RealName = Context.Request.ServerVariables[ " REMOTE_ADDR "];
this.userInfo.UserName = Context.Request.ServerVariables[ " REMOTE_ADDR "];
this.userInfo.IPAddress = Context.Request.ServerVariables[ " REMOTE_ADDR "];
// 設置操作員類型,防止出現錯誤,因為不小心變成系統管理員就不好了
// if (this.userInfo.RoleId.Length == 0)
// {
// this.userInfo.RoleId = DefaultRole.User.ToString();
// }
}
}
return this.userInfo;
}
set
{
this.userInfo = value;
}
}
protected void Page_Load( object sender, EventArgs e)
{
bool userIsLogOn = Utilities.UserIsLogOn();
this.btnLogOn.Enabled = !userIsLogOn;
this.btnLogOut1.Enabled = userIsLogOn;
this.btnLogOut2.Enabled = userIsLogOn;
}
protected void btnLogOn_Click( object sender, EventArgs e)
{
// 這是退出后需要重新定位的位置
string returnURL = " http://localhost/CRM/Default.aspx ";
// 這里可以傳遞比較復雜的URL參數信息
returnURL = Server.UrlEncode(returnURL);
// 這里是跳轉到單點登錄的位置
string url = " http://localhost/DotNet.WebForm/LogOn.aspx?ReturnURL= " + returnURL;
// 進行重新定位
Page.Response.Redirect(url);
}
protected void btnLogOut1_Click( object sender, EventArgs e)
{
// 先在本系統進行退出動作
Utilities.Logout();
// 這是退出后需要重新定位的位置
string returnURL = " http://localhost/CRM/Default.aspx ";
// 這里可以傳遞比較復雜的URL參數信息
returnURL = Server.UrlEncode(returnURL);
// 這里是跳轉到單點登錄的位置
string url = " http://localhost/DotNet.WebForm/LogOut.aspx?ReturnURL= " + returnURL;
// 進行重新定位
Page.Response.Redirect(url);
}
protected void btnLogOut2_Click( object sender, EventArgs e)
{
// 先在本系統進行退出動作
Utilities.Logout();
// 這是退出后需要重新定位的位置
string returnURL = " http://localhost/CRM/Default.aspx ";
// 這里可以傳遞比較復雜的URL參數信息
returnURL = Server.UrlEncode(returnURL);
// 這里是跳轉到單點登錄的位置
string url = " http://localhost/DotNet.WebForm/LogOuting.aspx?ReturnURL= " + returnURL;
// 進行重新定位
Page.Response.Redirect(url);
}
}
系統的運行效果如下:
所有系統的登錄都導航到 通用權限管理系統的登錄界面里來登錄,這樣可以通過通用權限權限管理系統的強大后台管理功能,徹底管理好帳戶的登錄限制等等。
維護N多套代碼,還不如維護一套通用權限管理系統的底層代碼,折騰來折騰去,調試來調試去浪費時間,不如直接采用通用權限管理系統的省事省心,強大穩定,有良好售后服務,有良好的代碼質量,可以放心使用。說白了就是花錢辦事還是花時間辦事的區別。
這個是模擬登錄CRM系統的效果,下圖表示系統還沒登錄
點擊登錄后,會跳轉到通用權限管理系統的統一扽路頁面,進行登錄操作。
登錄成功后,會自動跳轉到當前的CRM系統,同時CRM系統還可以得到當前登錄用戶的用戶詳細信息,這些信息可以用在CRM系統的各種邏輯判斷上了。
接下來是退出登錄的提示信息,用戶可以直接退出,也可以有提示信息的退出方式可以靈活選擇
用戶安全退出后,CRM系統里同步退出了。
通用權限管理不僅僅是權限管理同時也是強大穩定的簡易單點登錄系統,並提供相關的全部源碼,優點就是代碼簡介功能強大穩定可靠。
1: 簡單好用。
2:代碼統一。
3:最小程度影響現有系統。
4:各種.NET系統都可以集成,甚至php,java, asp 等都可以進行集成。
上面實例的相關代碼參考如下: