CredentialHandler 组件

目录

简介

CredentialHandler 元素表示 Realm 用来比较所提供的凭据(例如密码)与 Realm 存储的凭据版本的组件。CredentialHandler 还可以用于生成给定凭据的新存储版本,这在例如向 Realm 添加新用户或更改用户密码时是必需的。

CredentialHandler 元素必须嵌套在 Realm 组件中。如果未包含此元素,将使用 MessageDigestCredentialHandler 创建一个默认的 CredentialHandler

属性

常用属性

CredentialHandler 的所有实现都支持以下属性

属性描述
className

要使用的实现类的 Java 类名。此G类必须实现 org.apache.catalina.CredentialHandler 接口。

与大多数 Catalina 组件不同,有多个标准 CredentialHandler 实现可用。因此,如果存在 CredentialHandler 元素,则必须使用 className 属性来选择您希望使用的实现。

MessageDigestCredentialHandler

当存储的密码受消息摘要保护时,将使用 MessageDigestCredentialHandler。此凭据处理器支持以下形式的存储密码

  • plainText - 如果未指定算法,则为明文凭据
  • encodedCredential - 使用配置的摘要进行处理后,密码的十六进制编码摘要
  • {MD5}encodedCredential - 密码的 Base64 编码 MD5 摘要
  • {SHA}encodedCredential - 密码的 Base64 编码 SHA1 摘要
  • {SSHA}encodedCredential - 20 字符盐值,后跟加盐的 SHA1 摘要 Base64 编码
  • salt$iterationCount$encodedCredential - 十六进制编码的盐值、迭代计数和十六进制编码的凭据,每个都用 $ 分隔

如果存储的密码形式不包含迭代计数,则使用迭代计数 1。

如果存储的密码形式不包含盐值,则不使用盐值。

属性描述
algorithm

用于编码数据库中存储的用户密码的 java.security.MessageDigest 算法名称。如果未指定,则假定用户密码以明文形式存储。

encoding

摘要密码需要将其转换为字节。此属性确定字符和字节之间转换所使用的字符编码。如果未指定,将使用 UTF-8。

iterations

从明文凭据创建新的存储凭据时使用的迭代次数。

saltLength

从明文凭据创建新的存储凭据时使用的随机生成盐值的长度。

NestedCredentialHandler

NestedCredentialHandlerCredentialHandler 的一个实现,它将委托给一个或多个子 CredentialHandler。

使用 NestedCredentialHandler 允许开发人员组合相同或不同类型的多个 CredentialHandler

子 CredentialHandler 通过将 CredentialHandler 元素嵌套在定义 NestedCredentialHandler 的 CredentialHandler 元素内部来定义。凭据将按照它们列出的顺序与每个 CredentialHandler 进行匹配。与任何 CredentialHandler 的匹配都足以使凭据被视为匹配。

SecretKeyCredentialHandler

当存储的密码使用 javax.crypto.SecretKeyFactory 构建时,将使用 SecretKeyCredentialHandler。此凭据处理器支持以下形式的存储密码

  • salt$iterationCount$encodedCredential - 十六进制编码的盐值、迭代计数和十六进制编码的凭据,每个都用 $ 分隔

如果存储的密码形式不包含迭代计数,则使用迭代计数 1。

如果存储的密码形式不包含盐值,则不使用盐值。

属性描述
algorithm

用于编码数据库中存储的用户密码的秘密密钥算法名称。如果未指定,则使用默认值 PBKDF2WithHmacSHA1

keyLength

为存储凭据生成的密钥长度。如果未指定,则使用默认值 160

iterations

从明文凭据创建新的存储凭据时使用的迭代次数。

saltLength

从明文凭据创建新的存储凭据时使用的随机生成盐值的长度。

嵌套组件

如果您正在使用 NestedCredentialHandler 实现 或扩展 NestedCredentialHandler 的 CredentialHandler,则一个或多个 <CredentialHandler> 元素可以嵌套在其内部。

特殊功能

没有与 CredentialHandler 元素相关的特殊功能。