NET移植案例學(xué)習(xí):建造Web網(wǎng)站(2)
發(fā)表時(shí)間:2024-06-21 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]移植方法的選擇 將站點(diǎn)移植到Visual Basic .NET和.NET框架的第一步是看看有哪些方法可供選擇,F(xiàn)在有三種方法可以使用: · 將站點(diǎn)和Visual Basic 6.0的組件移植到ASP .NET和Visual Basic .NET · 將站點(diǎn)移植到ASP ...
移植方法的選擇
將站點(diǎn)移植到Visual Basic .NET和.NET框架的第一步是看看有哪些方法可供選擇,F(xiàn)在有三種方法可以使用:
· 將站點(diǎn)和Visual Basic 6.0的組件移植到ASP .NET和Visual Basic .NET
· 將站點(diǎn)移植到ASP .NET,再用COM+ interoperability與現(xiàn)存的Visual Basic 6.0組件通訊
· 不改變現(xiàn)存的站點(diǎn),而通過(guò)增加用ASP .NET和Visual Basic .NET寫(xiě)的新的功能模塊來(lái)擴(kuò)展站點(diǎn)的功能
在開(kāi)始開(kāi)發(fā)之前,開(kāi)發(fā)小組確定了利用.NET的哪些功能模塊來(lái)替代網(wǎng)站中復(fù)雜的,且有時(shí)會(huì)有問(wèn)題的代碼,并增加一些新的功能。具體的講,他們希望按下面的要求重建網(wǎng)站:
· 用ASP .NET認(rèn)證來(lái)替代原來(lái)的用戶安全機(jī)制
· 用ASP .NET Web Form確認(rèn)控件來(lái)替代客戶端用于報(bào)告產(chǎn)品漏洞和描述缺點(diǎn)的確認(rèn)邏輯
· 用ASP .NET Web Services將Microsoft其它的網(wǎng)站溶入beta版產(chǎn)品漏洞報(bào)告體系中
· 利用.NET框架的本地化功能建造一個(gè)可以很容易實(shí)現(xiàn)本地化的Web站點(diǎn)
· 利用ASP .NET向用戶提供個(gè)性化的菜單和橫幅圖片
為了充分利用這些特點(diǎn),開(kāi)發(fā)組決定將ASP頁(yè)面移植成ASP .NET頁(yè)面。他們將不移植現(xiàn)存的Visual Basic 6.0的ActiveX組件,而是創(chuàng)建新的Visual Basic .NET組件來(lái)實(shí)現(xiàn)Web Service和本地化。
現(xiàn)在讓我們看看為了完成移植,對(duì)這個(gè)網(wǎng)站到底做了哪些修改。
結(jié)合ASP .NET認(rèn)證功能
移植的第一步就是用ASP .NET中基于cookie的認(rèn)證機(jī)制來(lái)替換原來(lái)的客戶安全機(jī)制。這種安全認(rèn)證機(jī)制首先出現(xiàn)在PDC技術(shù)預(yù)覽中,并在Visual Studio .NET Beta 1中得到了發(fā)展。它的目標(biāo)是確定誰(shuí)在訪問(wèn)網(wǎng)站,而不是阻止用戶訪問(wèn)。因此,開(kāi)發(fā)組修改了成員資格系統(tǒng),幫助用戶注冊(cè)到Web站點(diǎn),并且在以后的Beta版產(chǎn)品中可以繼續(xù)使用。
識(shí)別每個(gè)訪問(wèn)者的目的是跟蹤他們報(bào)告的漏洞和缺點(diǎn),并與他們進(jìn)行必要的交流,以徹底解決問(wèn)題。除了把用戶的反饋送到特定的測(cè)試站點(diǎn),用戶還可以定制這個(gè)站點(diǎn),以滿足自己的需要,幫助客戶將注意力集中在他們需要的信息上。把用戶和他們感興趣的內(nèi)容聯(lián)系起來(lái)能幫助站點(diǎn)管理員了解用戶對(duì)什么問(wèn)題最感興趣。大多數(shù)測(cè)試站點(diǎn)包括了Visual Studio .NET和.NET框架各個(gè)方面的內(nèi)容,允許用戶訪問(wèn)站點(diǎn)上所有的文檔,但某些用于特定方面(比如Visual Studio .NET IDE shell整和)的測(cè)試站點(diǎn)利用過(guò)濾器向客戶只提供他們感興趣的文檔。
原先使用的認(rèn)證方式使用一個(gè)ASP服務(wù)器端文件和一個(gè)Visual Basic組件所提供的方法,驗(yàn)證來(lái)訪者所提供的用戶ID和密碼是否是數(shù)據(jù)庫(kù)的成員。這個(gè)文件提供了可重用代碼來(lái)完成安全檢查,但這就意味著這個(gè)文件需要被包含在每一頁(yè)的開(kāi)頭,才能保證這一頁(yè)不會(huì)被未經(jīng)過(guò)認(rèn)證的用戶打開(kāi)。在每一頁(yè)包含這個(gè)文件給管理員配置不需要安全保護(hù)的頁(yè)帶來(lái)了麻煩。
在ASP .NET中實(shí)現(xiàn)認(rèn)證是很容易的,因?yàn)榛赾ookie的認(rèn)證通過(guò)將站點(diǎn)的文檔存放在某一個(gè)特定的文件夾實(shí)現(xiàn)了對(duì)文檔的保護(hù)。當(dāng)用戶企圖訪問(wèn)這個(gè)受保護(hù)的文檔時(shí),.NET框架將自動(dòng)判斷用戶是否經(jīng)過(guò)了認(rèn)證。如果用戶未被認(rèn)證,.NET框架會(huì)把這個(gè)未經(jīng)認(rèn)證的請(qǐng)求重定向到某一個(gè)特定的HTML表單,讓用戶輸入認(rèn)證信息,并提交這個(gè)表單。如果用戶得到了認(rèn)證,.NET框架會(huì)產(chǎn)生一個(gè)可以辨別用戶的cookie,并重定向到原先的請(qǐng)求頁(yè)面。.NET框架還提供了一些類來(lái)幫助我們與認(rèn)證過(guò)程交互和訪問(wèn)保存在cookie中的認(rèn)證信息。
我們可以用Web站點(diǎn)的config.web文件來(lái)配置ASP .NET的認(rèn)證體系。這個(gè)配置文件包含了一個(gè)用于指定認(rèn)證方式的塊、該塊指明了HTML登陸表單的URL和密碼的格式。圖3是一個(gè)設(shè)置基于cookie的認(rèn)證的config.web文件。
Web站點(diǎn)上原來(lái)的那種安全認(rèn)證方式為每一個(gè)訪問(wèn)者唯一確立了一個(gè)對(duì)話ID。因?yàn)橐呀?jīng)生成了這個(gè)ID,所以我們?cè)谝浦舱J(rèn)證過(guò)程不要改動(dòng)現(xiàn)存的代碼。ASP .NET認(rèn)證機(jī)制將把未經(jīng)認(rèn)證的用戶重定向到登陸頁(yè),讓用戶提交信用證。一旦提交了登陸頁(yè),用戶ID和密碼將被確認(rèn),還將產(chǎn)生一個(gè)會(huì)話ID。
實(shí)現(xiàn)ASP .NET認(rèn)證體系只要修改原來(lái)的登陸頁(yè)面的兩個(gè)地方。我們沒(méi)有向客戶的cookie寫(xiě)入會(huì)話的關(guān)鍵字,而是使用了ASP .NET認(rèn)證cookie,將它的值設(shè)為會(huì)話的關(guān)鍵字。然后通過(guò)CookieAuthentication 類的RedirectFromLoginPage方法將用戶重新引導(dǎo)到原先的請(qǐng)求頁(yè)。在接下來(lái)的請(qǐng)求中,將通過(guò).NET框架的HttpContext.User類來(lái)訪問(wèn)會(huì)話ID。圖4顯示的是修改后的登錄認(rèn)證檢查。
除了提供了一種更安全、更容易實(shí)現(xiàn)的安全認(rèn)證體制外,ASP .NET認(rèn)證體制還可以區(qū)別對(duì)待認(rèn)證過(guò)的和未經(jīng)認(rèn)證的內(nèi)容。因?yàn)楸Wo(hù)的范圍是由config.web文件中的目錄結(jié)構(gòu)決定的,所以只要把內(nèi)容移出受保護(hù)的文件夾就可以取消對(duì)內(nèi)容的保護(hù)了。
為了讓認(rèn)證機(jī)制能發(fā)揮作用,所有需要認(rèn)證才可以訪問(wèn)的文件的擴(kuò)展名應(yīng)改為.aspx(ASP.NET文件的擴(kuò)展名)。正如你將在下面看到的,這是一個(gè)相對(duì)簡(jiǎn)單的過(guò)程。