首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Elytron凭据商店编程访问密码

从Elytron凭据商店编程访问密码
EN

Stack Overflow用户
提问于 2018-05-02 13:16:09
回答 1查看 1.1K关注 0票数 2

我正在使用WildFly 12上的Elytron存储数据源密码。

我使用以下CLI命令来存储密码:

代码语言:javascript
复制
/subsystem=elytron/credential-store=ds_credentials:add( \
    location="credentials/csstore.jceks", \
    relative-to=jboss.server.data.dir, \
    credential-reference={clear-text="changeit"}, \
    create=true)

/subsystem=datasources/data-source=mydatasource/:undefine-attribute(name=password)

/subsystem=elytron/credential-store=ds_credentials:add-alias(alias=db_password, \
    secret-value="datasource_password_clear_text")

/subsystem=datasources/data-source=mydatasource/:write-attribute( \
    name=credential-reference, \
    value={store=ds_credentials, alias=db_password})

到目前为止,这是非常有效的。现在我需要一种以编程方式读取这个密码的方法,这样我就可以创建一个PostgreSQL数据库转储。

EN

回答 1

Stack Overflow用户

发布于 2018-05-03 09:30:10

我找到了一种可能性,但不知何故,这感觉是一种不恰当的解决办法。

代码语言:javascript
复制
static final String DB_PASS_ALIAS = "db_password/passwordcredential/clear/";

File keystoreFile = new File(System.getProperty("jboss.server.data.dir"),
"credentials/csstore.jceks");

// Open keystore
InputStream keystoreStream = new FileInputStream(keystoreFile);
KeyStore keystore = KeyStore.getInstance("JCEKS");
keystore.load(keystoreStream, KEYSTORE_PASS.toCharArray());

// Check if password for alias is available
if (!keystore.containsAlias(DB_PASS_ALIAS)) {
  throw new RuntimeException("Alias for key not found");
}

// Get password
Key key = keystore.getKey(DB_PASS_ALIAS, KEYSTORE_PASS.toCharArray());
// Decode password - remove offset from decoded string
final String password = new String(key.getEncoded(), 2, key.getEncoded().length - 2);

我愿意接受任何更好的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50135613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档