內建多個子系統的單點登入(網站入口方式)附源碼

眼前有20萬行以上的代碼時很多人都會眼花缭亂,不知道從哪裡開始下手了,甚至不會去研究幾下就直接放棄了。其實大多時候沒有想象的那麼複雜,代碼裡一大部分都是有重複的,有本質上差别的部分還是很少的。

   春節期間正好有空,把通用權限管理系統的使用者登入部分單獨出來,做了一個很小的項目總共代碼就幾千行閱讀起來就很簡單了。下面是在自己的系統裡內建通用權限管理系統登入功能的4個核心步驟如下圖。

   可以按照下面的代碼方式,可以把N多個子系統都內建到統一的系統上去了,可以友善實作用同一個使用者名密碼登入多個子系統了,下面的代碼就是單點登入的源碼,若您要在實際項目裡使用,記得向吉日嘎拉索取最新的代碼,QQ252056973。

    核心思想就是:

       每個業務系統,分2個資料庫設計系統,一個是使用者權限系統,一個是業務系統,這樣問題就簡化了。

    參考代碼如下:

    /Files/jirigala/WebSite.rar

将權限管理、工作流管理做到我能力的極緻,一個人隻能做好那麼很少的幾件事情。

上文中實作了直接連接配接資料庫的方式,通過配置檔案,自定義的登入界面單點登入到通用權限管理系統的功能實作。這個方法不好的地方就是暴露了資料庫連接配接,對系統的安全有嚴重的隐患,最好不要用直接通路資料庫的方式進行多系統的單點登入,雖然這個比較簡單,但是安全隐患太大,核心的底層資料庫能接觸的人越少越好盡量防止沒必要的事情發生比較好,而且從多個系統登入時,每次都輸入密碼也很鬧心。

   上文位址如下: 通用權限管理系統元件 (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 等都可以進行內建。

上面執行個體的相關代碼參考如下:

 /Files/jirigala/CRM.rar

将權限管理、工作流管理做到我能力的極緻,一個人隻能做好那麼很少的幾件事情。

內建多個子系統的單點登入(網站入口方式)附源碼

眼前有20萬行以上的代碼時很多人都會眼花缭亂,不知道從哪裡開始下手了,甚至不會去研究幾下就直接放棄了。其實大多時候沒有想象的那麼複雜,代碼裡一大部分都是有重複的,有本質上差别的部分還是很少的。

   春節期間正好有空,把通用權限管理系統的使用者登入部分單獨出來,做了一個很小的項目總共代碼就幾千行閱讀起來就很簡單了。下面是在自己的系統裡內建通用權限管理系統登入功能的4個核心步驟如下圖。

   可以按照下面的代碼方式,可以把N多個子系統都內建到統一的系統上去了,可以友善實作用同一個使用者名密碼登入多個子系統了,下面的代碼就是單點登入的源碼,若您要在實際項目裡使用,記得向吉日嘎拉索取最新的代碼,QQ252056973。

    核心思想就是:

       每個業務系統,分2個資料庫設計系統,一個是使用者權限系統,一個是業務系統,這樣問題就簡化了。

    參考代碼如下:

    /Files/jirigala/WebSite.rar

将權限管理、工作流管理做到我能力的極緻,一個人隻能做好那麼很少的幾件事情。

上文中實作了直接連接配接資料庫的方式,通過配置檔案,自定義的登入界面單點登入到通用權限管理系統的功能實作。這個方法不好的地方就是暴露了資料庫連接配接,對系統的安全有嚴重的隐患,最好不要用直接通路資料庫的方式進行多系統的單點登入,雖然這個比較簡單,但是安全隐患太大,核心的底層資料庫能接觸的人越少越好盡量防止沒必要的事情發生比較好,而且從多個系統登入時,每次都輸入密碼也很鬧心。

   上文位址如下: 通用權限管理系統元件 (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 等都可以進行內建。

上面執行個體的相關代碼參考如下:

 /Files/jirigala/CRM.rar

将權限管理、工作流管理做到我能力的極緻,一個人隻能做好那麼很少的幾件事情。

最近更新