CombinedRealm 是一种 Tomcat 的 Realm 实现,通过一个或多个子 Realm 进行用户验证。
通过 CombinedRealm,开发者能够将多个 Realm(同一或不同类型) 组合起来使用,从而用于验证多种数据源,而且万一当其中一个 Realm 失败,或其他一些操作需要多个 Realm 时,它还能提供回滚处理。
子 Realm 是通过在定义 CombineRealm 的 Realm
元素中内嵌 Realm
元素来实现的。验证操作会按照 Realm 元素的叠加顺序来逐个进行。对逐个 Realm 进行验证,从而就能充分证明用户的身份。
为了配置 CombinedRealm,需要创建一个 <Realm>
元素,并将其内嵌在 <Engine>
或 <Host>
元素中的$CATALINA_BASE/conf/server.xml
文件内。同样,你也可以将其内嵌到 context.xml
文件下的 <Context>
节点。
下面是 server.xml 中的一段代码,综合使用了 UserDatabaseRealm 和 DataSourceRealm:
<Realm className="org.apache.catalina.realm.CombinedRealm" >
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
</Realm>