管理领域、角色及用户
为了使用tomcat的容器管理的安全防护机制,必须设定领域。领域只是用户、密码以及角色的集合。
web应用程序可以在其web.xml中设定哪些用户组可以访问哪些资源,而tomcat管理员则可以使用一个或多个领域实现来获取用户、密码以及角色信息。
tomcat含有可插入式的领域架构,并具备几种有用的领域实现:UserDatabaseRealm,JDBCRealm,JNDIRealm与JAASRralm
Java开发者可以创建额外的领域实现,以便作为与其用户和密码的接口,如欲指定应该使用何种领域,请在server.xml文件中插入Realm元素,以className属性设定 欲使用的领域,然后通过该实现的自定义属性以提供此领域相关的配置信息
UserDatabaseRealm
是从静态文件加载到内存中的,且直到tomcat停止后才从内存中清除。
事实上,tomcat所用的用户、密码以及角色只存在于内存中,换句话说,权限文件只会在启动时读入一次。
在UserDatabaseRealm中分配权限的默认文件为$CATALINA_HOME/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="yinnana" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
</tomcat-users>
JDBCRealm
能动态地访问数据,基本上这是使用关系型数据库的领域。
用户、密码及角色保存在数据库中,而JDBCRealm会马上访问他们
在server.xml文件中,需要将JDBC的连接参数设成领域的属性
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://10.151.15.100:3306/intell_kefu?characterEncoding=utf-8"
connectionName="intell_kefu"
connectionPassword="123qwe"
userTable="cs_user"
userRoleTable="cs_user_role"
userCredCol="login_pwd"
roleNameCol="role_id"
userNameCol="user_id"/>
</Realm>
容器管理的安全防护
当访问受保护的资源时,容器管理的验证方法控制确认用户身份的方式,tomcat支持四种容器管理的安全防护,而每种类型都以不同的方式取得身份
基本验证:通过HTTP验证,需要提供base64编码文本的用户口令
摘要验证:通过HTTP验证,需要提供摘要编码字符串的用户口令
表单验证:在网页的表单上要求提供用户密码
client-cert验证:以客户端数字证书来确认用户的身份
、从