参考: http://www.blogjava.net/asktalk/archive/2005/07/23/8221.html
在web应用中,对页面的访问控制通常通过程序来控制,流程为:
登录 → 设置session → 访问受限页面时检查session是否存在,如果不存在,禁止访问
对于较小型的web应用,可以通过tomcat内置的访问控制机制来实现权限控制。采用这种机制的好处是,程序中无需进行权限控制,完全通过对tomcat的配置即可完成访问控制。
实现:在用户访问受限页面时,如果用户没有登陆则自动跳转到登陆页面,只有通过登陆验证有权限的用户可以访问受限资源。
下面讲如何配置使用:
1.为了在tomcat页面设置访问权限控制,在项目的WEB-INF/web.xml文件中,进行如下设置:
<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的角色有访问权限)。
2.使用的角色名来自tomcat的配置文件${CATALINA_HOME}/conf/tomcat-users.xml。 如下所示:
<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;
<user name="admin" password="admin" roles="tian,tomcat,manager" />指通过登录名admin和密码admin登陆的用户拥有tian,tomcat,manager这3个角色的权限。
所用角色名也可以自己配置,使用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>