最近因為項目代碼重構需要重新整理用戶登錄和權限控制的部分,現有的代碼大體是參照了.NET的FORM認證,并結合了PORTAL KITS的登錄控制,代碼比較啰嗦,可維護性比較差。于是有了以下的幾個需求(大多數系統應該都會碰到):
1.用.NET自帶的FORM認證來實現安全登錄
2.登錄后需要記錄登錄用戶的基本信息,方便所有頁面調用
3.記錄本機登錄狀態,短時間關閉窗口后不用重新登錄
4.權限控制和代碼的文件夾結構相呼應,即按角色允許訪問不同的目錄
5.權限控制有可能需要細化到每一個頁面,即按角色允許訪問不同的頁面
6.以上的部分盡量自己少寫代碼,用自帶的類庫和機制實現
第一步:準備工作
先準備一個名為Test的WEB項目,包含:
Default.aspx,默認頁,隨便顯示一些信息,
Login.aspx,登錄頁,上面放兩個文本框,用來輸入用戶名和密碼,一個登錄按鈕,一個指向Register.aspx的超鏈,
Register.aspx,用戶注冊頁,注冊用戶信息,隨便放一點文本框,主要是模擬一下注冊,不用真正實現,
Web.config,配置頁面。
注冊頁與登錄頁在同一目錄的機妙后面會說。
第二步:Web.config文件的修改
1、打開Web.config文件,找到authentication節,將其改為如下:
<authentication mode="Forms"> <forms name=".ASPXAUTH" loginUrl="Login.aspx" protection="All" path="/" timeout="20"/></authentication><authorization> <deny users="?"></deny></authorization>
配置節屬性的具體意義和其他沒有加入的屬性網上到處都有查。這里注意一下的是authentication節和authorization節,兩個單詞很相似,但卻不是同一個單詞,每個節下面的內容也不能寫到一起。
其中,authorization節中的“allow”表示允許的意思,“*”表示所有用戶;而“deny”表示拒絕的意思;“?”表示匿名用戶;此處加入后,則代表根目錄下的所有文件和所有的子目錄都不能匿名訪問,Login.aspx 頁面除外。
2、Web.config中,Location節的應用
做了上面的配置之后,我們會發現,在沒登錄的情況下,用瀏覽器打開Default.aspx會自動轉到Login.aspx,同理Register.aspx頁面也會如此。問題:注冊用戶怎么可能在登錄后才能訪問呢?
那么我們就得說了,當注冊頁與登錄頁在同一目錄,為了達到不用登錄就能訪問注冊頁的目的,我們就得對訪問限制的Web.config配置處理一下。
方法一 :注冊頁與登錄頁放在不的目錄內
我們在根目錄添加一個文件夾Pub,將Register.aspx移動到此文件夾里,此時仍不能訪問,需要在文件夾內添加一個Web.config文件,加入:
<configuration> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </configuration>
新聞熱點
疑難解答
圖片精選