如何在嵌入式 tomcat 中使用 digest.sh

Posted

技术标签:

【中文标题】如何在嵌入式 tomcat 中使用 digest.sh【英文标题】:how to use digest.sh in embedded-tomcat 【发布时间】:2021-12-07 05:37:54 【问题描述】:

我知道$CATALINE_HOME/bin/digest.sh 用于生成可在tomcat_users.xml 中使用的散列密码,但是我如何在项目中使用嵌入式tomcat 时实现相同的行为,因为它没有bin/digest.sh

更新:

我发现 tomcat 的 RealmBase.java 有一个方法 digest() 与 digest.sh 的功能相同,但是,自从 tomcat 9 和我使用 tomcat 9 以来,它已被弃用。有谁知道这个的新实现是什么方法是什么?

【问题讨论】:

【参考方案1】:

处理散列密码的中心方法是CredentialHandler#mutate,这也是digest.sh 使用的方法。它将提供的密码转换为其存储的形式。

您可以通过多种方式检索CredentialHandler

来自Tomcat 对象,使用tomcat.getEngine().getRealm().getCredentialHandler()。为此,您需要启动Realm(如果它没有运行), 从 servlet,通过检索 Globals.CREDENTIAL_HANDLER ("org.apache.catalina.CredentialHandler") servlet 上下文属性。

【讨论】:

【参考方案2】:

digest.sh 用于生成密码哈希。如果您需要生成密码哈希,只需从 Tomcat 主页下载 Tomcat 存档并运行脚本即可。

嵌入式 Tomcat 没有此脚本。

【讨论】:

我有一个使用嵌入式 tomcat 的项目,现在要求加密 tomcat-users.xml 的密码,通过编程我能够使用 tomcat-embed api 设置纯文本密码和另外,如果手动设置哈希密码,我可以使用 org.apache.catalina.realm.MessageDigestCredentialHandler; 类获取,但是是否有任何类似的类可以加密类似于手动执行的 digest.sh 的字符串。

以上是关于如何在嵌入式 tomcat 中使用 digest.sh的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中使用 volley 实现 Digest 身份验证

如何解决 Angular “10 $digest() 迭代次数达到”错误

转载$apply()和$digest()

理解Angular中的$apply()以及$digest()

理解Angular中的$apply()以及$digest()

理解Angular中的$apply()以及$digest()