参考: 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>