2.8. 为安全 Realms 设置缓存
Elytron 提供了一个 缓存域
,允许您从安全域缓存凭据查找的结果。例如,您可以使用它为来自 LDAP 或数据库的凭证配置缓存,以提高经常查询用户的性能。
caching-realm
使用 LRU 或 Least Recently Used 缓存策略来缓存 PasswordCredential
凭证,该策略中访问的条目在达到最大条目数时将被丢弃。
您可以将 缓存域用于以下
安全域:
-
filesystem-realm
-
jdbc-realm
-
ldap-realm
- 自定义安全域
如果您在 JBoss EAP 外部对凭据来源进行更改,则这些更改只有在底层安全域支持时才会传播到 JBoss EAP 缓存域。特别是 ldap-realm
支持侦听,但 ldap-realm 内过滤的属性(
如 角色
)不支持。
为确保缓存域具有正确的用户数据缓存,建议您通过缓存域而不是您的凭据来源来修改用户属性。或者,您也可以清除缓存。
通过缓存域进行用户更改仅作为技术预览提供。技术预览功能不包括在红帽生产服务级别协议(SLA)中,且其功能可能并不完善。因此,红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需有关技术预览功能支持范围的信息,请参阅红帽客户门户网站中的技术预览功能支持范围。
配置和使用 缓存域
:
创建现有的安全域。
您需要一个现有的安全域来
用于缓存域
。例如,您可以创建一个类似于使用基于文件系统
的身份存储配置身份验证中的步骤的文件系统 域。filesystem-realm 示例
/subsystem=elytron/filesystem-realm=exampleFsRealm:add(path=fs-realm-users, relative-to=jboss.server.config.dir) /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity(identity=user1) /subsystem=elytron/filesystem-realm=exampleFsRealm:set-password(identity=user1, clear={password="password123"}) /subsystem=elytron/filesystem-realm=exampleFsRealm:add-identity-attribute(identity=user1,name=Roles,value=["Admin","Guest"]) /subsystem=elytron/simple-role-decoder=from-roles-attribute:add(attribute=Roles)
创建
缓存域.
具有要缓存的现有域后,创建一个引用它的
缓存域
。使用 exampleFsRealm 的缓存域示例
/subsystem=elytron/caching-realm=exampleCacheRealm:add(realm=exampleFsRealm)
使用
缓存域.
创建
缓存域
后,您可以像任何其他安全域一样在安全配置中使用它。例如,您可以在相同位置使用文件系统域,通过基于文件系统的
身份服务在配置身份验证时使用文件系统域。使用 cache-realm 配置示例
/subsystem=elytron/security-domain=exampleFsSD:add(realms=[{realm=exampleCacheRealm, role-decoder=from-roles-attribute}], default-realm=exampleCacheRealm, permission-mapper=default-permission-mapper) /subsystem=elytron/http-authentication-factory=example-fs-http-auth:add(http-server-mechanism-factory=global, security-domain=exampleFsSD, mechanism-configurations=[{mechanism-name=BASIC, mechanism-realm-configurations=[{realm-name=exampleApplicationDomain}]}])
您可以使用 caching- realm
的 maximum-entries 和
属性来控制缓存大小和项目过期时间。 有关这些属性的详情,请参阅如何配置服务器安全性的 Elytron Subsystem 组件参考一节。
maximum-
age
清除 缓存域
缓存
您可以使用 clear-cache
命令清除现有的缓存。清除缓存会强制它使用来自安全域的最新数据进行重复。
/subsystem=elytron/caching-realm=exampleCacheRealm:clear-cache