參考: http://www.blogjava.net/asktalk/archive/2005/07/23/8221.htmlhtml
在web應用中,對頁面的訪問控制一般經過程序來控制,流程爲:
登陸 → 設置session → 訪問受限頁面時檢查session是否存在,若是不存在,禁止訪問java
對於較小型的web應用,能夠經過tomcat內置的訪問控制機制來實現權限控制。採用這種機制的好處是,程序中無需進行權限控制,徹底經過對tomcat的配置便可完成訪問控制。web
實現:在用戶訪問受限頁面時,若是用戶沒有登錄則自動跳轉到登錄頁面,只有經過登錄驗證有權限的用戶能夠訪問受限資源。數據庫
下面講如何配置使用:瀏覽器
1.爲了在tomcat頁面設置訪問權限控制,在項目的WEB-INF/web.xml文件中,進行以下設置:tomcat
<security-constraint> <!--1.被保護的資源 --> <web-resource-collection> <web-resource-name>testLogin</web-resource-name> <url-pattern>/protected/*</url-pattern> </web-resource-collection> <!--2.有權限的角色 --> <auth-constraint> <role-name>tian</role-name> </auth-constraint> </security-constraint> <!-- 3.登陸方式 --> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config>
其中,<url-pattern>中指定受保護的url,能夠使用通配符*,一般對整個目錄進行訪問權限控制。(例子中指在protected目錄下的全部文件都被保護);
<auth-constraint>中指定哪些角色能夠訪問<url-pattern>指定的url,在<role-name>中能夠設置一個或多個角色名。(例子中角色名爲tian的角色有訪問權限)。session
2.使用的角色名來自tomcat的配置文件${CATALINA_HOME}/conf/tomcat-users.xml。 以下所示:jsp
<tomcat-users> <role rolename="tomcat"/> <role rolename="tian"/> <role rolename="manager"/> <user name="admin" password="admin" roles="tian,tomcat,manager" /> <user name="tian" password="tian" roles="tian,manager" /> </tomcat-users>
其中,<role rolename="tian"/>指角色名爲tian;post
<user name="admin" password="admin" roles="tian,tomcat,manager" />指經過登陸名admin和密碼admin登錄的用戶擁有tian,tomcat,manager這3個角色的權限。url
所用角色名也能夠本身配置,使用Realm,能夠從數據庫中獲取,下篇《在tomcat中使用Realm》再講。
3.<login-config>用來設置登陸方式;
<auth-method>的取值爲BASIC與FORM。若是爲BASIC,瀏覽器在須要登陸時彈出一個登陸窗口。若是爲FORM方式,須要指定登陸頁面和登陸失敗時的提示信息顯示頁面。(例子中使用的登錄方式爲FROM表單登錄)
其中的<form-login-page>指定登陸頁面url,<form-error-page>指定登陸失敗時的提示頁面url。
登陸頁面中,form的action,以及其中的用戶名和密碼兩個參數的名稱,都應取固定的值。登陸的後臺處理程序爲j_security_check;用戶名和密碼的參數名稱分別爲:j_username和j_password。
以下是登陸頁面(如:login.jsp)的一段示例代碼:
<form method="post" action='j_security_check' > <label >帳號:</label> <input name="j_username" type="text"/><br> <br> <label >密碼:</label> <input name="j_password" type="password"/><br> <br> <button id="j_login" type="submit" >登陸</button><br> </form>
而BASIC的配置以下:
<login-config> <auth-method>BASIC</auth-method> </login-config>