其實很多開發人員都早已經進入.NET時代了,更有不少都在ASP.NET MVC了,但是去年碰到一個客戶還在用很古老的asp系統,而且有接近10來個各種應用系統都是用ASP開發的,這樣一來想升級到C# ASP.NET還需要一個很漫長的過程。歷史遺留下來的系統不是那么容易想說升級就升級,需要有統一規划,還需要系統的培訓,有計划有目進行才能成功升級。
很多年沒寫asp的程序了看看代碼就頭大根本無從下手,也根本沒心思把那么多系統進行重構那不知道要重構多長時間了,但是沒辦法只能硬着頭皮上,以前的ASP老系統也要移植到通用權限管理系統的單點登錄上來,在不知道這些情況的時候,就在客戶面前牛也吹了,若不能實現這些功能了,這台階也下不來了。春節期間正好休息沒什么其他重要的事情需要處理,就完善一下ASP.NET與asp老系統的單點登錄集成,下面把一些思路與做法寫下來,給大家提供一個參考,有寫得不足的地方,歡迎大家批評指導。
asp的實現好了后,php, java 等等各種各樣的就同一個思路搞定就可以了,細節調試一下就可以了,方法思路都一樣就可以了。
下面先看看程序的運行效果:
其中asp目錄為當前驗證單點登錄的測試測試程序,只要引用幾個函數就可以了。DotNet.WebForm 為通用權限管理系統中的當點登錄實現網站,crm目錄為asp.net的單點登錄用例代碼部分。
若當前用戶還沒登錄,系統會自動跳轉到通用權限管理系統的登錄頁面中來。
我們輸入好用戶名密碼,進行登錄驗證
系統會自動跳轉到當前的asp系統里來了,而且顯示出當前用戶的登錄主鍵,還可以獲取很多信息,大家按需要改進一下函數就可以了,原先的asp系統只要小改一些內容就可以了,不用進行翻天覆地的重構,這個總比把老的asp系統徹底修改為asp.net來得快很多,以前的程序有的是穩定運行了很多年,經過很多細節的改進等,不是1-2天就可以轉到asp.net上來,但是集成一下通用權限管理系統的單點登錄功能,可能1-2天就可以集成好了,因為不需要對原來的系統進行翻天覆地的修改。
asp 里可以很方便的讀取到下面的所有參數,開發各種應用系統中常需要的參數也基本上足夠可以調用了。
下面的代碼為參考代碼:有些太簡單了一些畢竟是部分代碼開發而已,商業化的還是跟這個有些差別,就算是給大家提供一個參考吧。
2 <html>
3 <head>
4 <meta http-equiv= " Content-Type " content= " text/html; charset=UTF-8 ">
5 <title>DotNet 單點登錄的例子</title>
6 </head>
7 <body>
8 <%
9 Response.CodePage= 65001
10 Response.Charset= " UTF-8 "
11
12 ' 獲取當前用戶的主鍵
13 FUNCTION GetUserId()
14 ' 獲得各種屬性,就一行代碼就可以了,同時會進行登錄驗證
15 GetUserId = GetUser( " Id ")
16 END FUNCTION
17
18 FUNCTION GetUserRealName()
19 ' 獲得各種屬性,就一行代碼就可以了,同時會進行登錄驗證
20 GetUserRealName = GetUser( " RealName ")
21 END FUNCTION
22
23
24 ' 判斷當前用戶是否已經進行了登錄
25 FUNCTION Authentication()
26 userId = GetUserId()
27 IF ISNULL(userId) = FALSE THEN
28 Response.Write " 單點登錄驗證成成功<br> "
29 Response.Write " 當前用戶主鍵為: " + userId + " <br> "
30 END IF
31 realName = GetUserRealName()
32 IF ISNULL(userId) = FALSE THEN
33 Response.Write " 當前用戶姓名為: " + realName + " <br> "
34 END IF
35 END FUNCTION
36
37
38 ' 單點登錄(Single Sign On , 簡稱 SSO )
39 FUNCTION GetUser(key)
40 userProperty = NULL
41 ssoURL = " http://localhost/DotNet.WebForm/LogOn.aspx "
42 SET userCookies = request.Cookies()
43 ' 如果Cookies為空,則說明沒登錄,調回統一身份認證系統首頁,重新登錄。
44 IF LEN(userCookies) <= 0 THEN
45 Response.Redirect(ssoURL + " ?ReturnURL=http://localhost/asp/Default.asp ")
46 ELSE
47 FOR EACH cookie IN userCookies
48 IF (cookie = " DotNet ") THEN
49 dotNetCookie = Request.Cookies(cookie)
50 userProperty = Request.Cookies(cookie)(key)
51 EXIT FOR
52 END IF
53 NEXT
54 END IF
55 IF ISNULL(dotNetCookie) = TRUE OR dotNetCookie = "" THEN
56 Response.Redirect(ssoURL + " ?ReturnURL=http://localhost/asp/Default.asp ")
57 END IF
58 ' 這里是處理返回值
59 GetUser = userProperty
60 END FUNCTION
61
62 ' 獲取當前用戶的主鍵,驗證用戶是否已進行登錄操作
63 Authentication()
64 ' 列出所有的能獲得的參數
65 GetCookies()
66
67
68 ' 測試函數,獲取用戶所有的Cookies
69 FUNCTION GetCookies()
70 Response.Write " <br><br><br> 讀取當前瀏覽器中的Cookie:<br> "
71
72 DIM cookie,key
73 FOR EACH cookie IN Request.Cookies
74 IF Request.Cookies(cookie).haskeys THEN
75 Response.Write " <br>Cookie 名字: "&cookie& " <BR>--------------<BR> "
76
77 FOR EACH key IN Request.Cookies(cookie)
78 Response.Write " Key 名字: "&key& " ,值: "&Request.Cookies(cookie)(key)& " <BR> "
79 NEXT
80 ELSE
81 Response.Write " Cookie 名字: "&Request.Cookies(cookie)& " <BR> "
82 END IF
83 NEXT
84 END FUNCTION
85
86 %>
87
88 </body>
89 </html>