我有一个 Java 代码,用于加载在运行时(.war 文件)内定义的 key 存储。
KeyStore trustStore = KeyStore.getInstance("PKCS12");
File key = new File ("/was85/resources/security/ecommerce_gr_mobile.p12");
trustStore.load(new FileInputStream(key), "Pass".toCharArray());
但是,我不需要对 key 存储 - pass 进行硬编码。我需要从正在运行的 EAR 中获取它们,因为这些值在我们的环境(DEV - QA-UAT 和 PROD)中是不同的。
我读到我需要使用这样的东西:
Properties properties = new java.util.Properties();
InputStream inputStream =
getServletContext().getResourceAsStream("/WEB-INF/web.xml/worklight.properties");
properties.load(inputStream);
String keystore= properties.getProperty("ssl.keystore.path");
但是,worklight.properties 中的值是默认值,而不是我们在运行时中定义的值
工作灯.属性:
ssl.keystore.path = /conf/default.keystore
运行时内的 JDNI 值:
如何获取 JNDI 中定义的而不是默认的?
已编辑:
Web.xml:
<env-entry>
<description>[OPTIONAL] SSL certificate keystore location. Default: conf/default.keystore.</description>
<env-entry-name>ssl.keystore.path</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value/>
</env-entry>
<env-entry>
<description>[OPTIONAL] SSL certificate keystore type. Valid keystore types: jks, PKCS12. Default: jks.</description>
<env-entry-name>ssl.keystore.type</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value/>
</env-entry>
<env-entry>
<description>[OPTIONAL] SSL certificate keystore password.Default: worklight.</description>
<env-entry-name>ssl.keystore.password</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value/>
</env-entry>
我假设在web.xml
中你有这样的env-entry
(也许将你的web.xml添加到问题中):
<env-entry>
<env-entry-name>ssl.keystore.path</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/conf/default.keystore</env-entry-value>
</env-entry>
在这种情况下,您应该通过注释访问它,如下所示:
@Resource(name="ssl.keystore.path", type=String.class)
private String filePath;
或通过InitialContext
:
InitialContext ctx = new InitialContext();
String filePath = (String) ctx.lookup("java:comp/env/ssl.keystore.path");
我是一名优秀的程序员,十分优秀!