描述:在開發中咱們一般會碰到這樣的問題,例如:在項目的根目錄下面有一個文件或者文件夾須要用戶登錄後才能訪問。若是用戶在沒有登陸的狀況下訪問該文件或者該文件夾下面的文件時,直接攔截重定向到對應的登錄頁面。css
例一:html
我想讓用戶在訪問個人程序的Admin文件夾下的頁面時須要登陸,而在訪問其餘頁面時則不須要,也就是說Admin文件夾下的文件拒絕匿名訪問.web
下面是配置根目錄下的web.config文件中關於受權驗證的配置。安全
<system.web> post
<authentication mode="Forms"><!--默認狀態下位Windows--> 測試
<forms loginUrl="Admin/Login.aspx" name=".ASPXFORMSAUTH"></forms> spa
</authentication> .net
<authorization> orm
<allow users="*"/><!--容許任何訪問者訪問--> xml
</authorization>
</system.web>
<location path="Admin"><!--注意:該節點最好跟在</system.web>以後,儘管這兩個節點可能在web.config文件中相隔比較遠,不要以爲有什麼疑惑。下面是對Admin文件夾的訪問權限的配置。-->
<system.web>
<authorization>
<deny users="?"/><!--阻止匿名用戶訪問-->
</authorization>
</system.web>
</location>
注意location節,location節不須要<authorization>節了,倘若加了的話,便會出現"在應用程序級別以外使用註冊爲 allowDefinition='MachineToApplication' "這樣的錯誤了,若在子文件下添加配置文件時也要注意相同的問題.
這樣,當你在地址欄裏面直接訪問Admin下的任意(非Login.aspx文件)時,將會被重定向到Admin文件夾下的Login.aspx頁面。
那究竟是如何經過Login.aspx登錄頁面受權的呢(被受權後就能夠訪問Admin文件夾下面的文件了)?
Login.aspx頁面的後臺代碼:
if (userName == "xzl" && pwd == "000")
{
FormsAuthentication.RedirectFromLoginPage(userName, false);//受權(這裏是關鍵)
Response.Redirect("Main.aspx");//經過上面受權後,用戶名爲xzl的的用戶就能夠訪問Admin文件夾下面的Main.aspx文件了
}
當經過上面方式受權成功後,能夠經過以下代碼來訪問登陸的用戶名:
//若是登陸成功
if (User.Identity.IsAuthenticated)
{
//輸出登陸名
string userName = User.Identity.Name;//獲取登陸名
Response.Write("歡迎管理員:" + userName + "登陸!");
}
固然,也能夠經過代碼來安全推出:
System.Web.Security.FormsAuthentication.SignOut();
例二:
上面的方式是「集中管理」的方式,也就是說在一個配置文件中配置全部頁面的訪問權限,這兒再介紹一下分散管理的方式,即經過多個web.config來配置文件的訪問權限。
首先,web.config的做用咱們應該知道兩點:
一、web.config的設置將做用於所在目錄及所在目錄下的全部子文件下的資源——通常指.net資源,如aspx、ashx、ascx等文件,對.html、js、css等則不起做用,固然,不一樣的iis版本下有所不一樣,在此不作討論。
二、子目錄下的web.config文件將覆蓋從父目錄繼承下來的設置。
接下來,咱們新建一個測試項目,項目資源以下圖:
上圖中的Admin文件夾是受保護的,只有經過省份驗證的用戶能夠訪問,因此,咱們在根目錄下的web.config配置文件中作以下配置:
<authentication mode="Forms"><!--Forms驗證-->
<forms loginUrl="~/Admin/Login.aspx" name=".ASPX"></forms><!--未經過則轉向Login.aspx登陸頁-->
</authentication>
<authorization><!--受權:對於此目錄及此目錄如下的全部資源-->
<allow users="*"/><!--容許全部用戶訪問-->
</authorization>
上面配置的信息是,根目錄及根目錄下的全部資源容許匿名用戶訪問,這顯然不符合咱們的要求,可是,咱們根據上面2點認知中的第2點知道,能夠經過重寫web.config配置來覆蓋父目錄提供的規則,所以,咱們能夠在Admin文件夾中新建一個web.config文件來配置Admin文件夾的訪問受權規則,以下:
<configuration>
<system.web>
<authorization><!--受權-->
<deny users="?"/><!--阻止匿名用戶訪問-->
</authorization>
</system.web>
</configuration>
如此如下,咱們就經過「分散管理」的方式配置好了項目的訪問規則。