如何在嵌入式 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() 迭代次数达到”错误
理解Angular中的$apply()以及$digest()