描述:在開發中我們通常會碰到這樣的問題,例如:在項目的根目錄下面有一個文件或者文件夾需要用戶登陸后才能訪問。如果用戶在沒有登錄的情況下訪問該文件或者該文件夾下面的文件時,直接攔截重定向到對應的登陸頁面。
例一:
我想讓用戶在訪問我的程序的Admin文件夾下的頁面時需要登錄,而在訪問其他頁面時則不需要,也就是說Admin文件夾下的文件拒絕匿名訪問.
下面是配置根目錄下的web.config文件中關於授權驗證的配置。
- <system.web>
- <authentication mode="Forms"><!--默認狀態下位Windows-->
- <forms loginUrl="Admin/Login.aspx" name=".ASPXFORMSAUTH"></forms>
- </authentication>
- <authorization>
- <allow users="*"/><!--允許任何訪問者訪問-->
- </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的作用我們應該知道兩點:
1、web.config的設置將作用於所在目錄及所在目錄下的所有子文件下的資源——一般指.net資源,如aspx、ashx、ascx等文件,對.html、js、css等則不起作用,當然,不同的iis版本下有所不同,在此不做討論。
2、子目錄下的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>
如此以下,我們就通過“分散管理”的方式配置好了項目的訪問規則。
