高级自定义 > 业务逻辑自定义 > 已加密密码 > 自定义点
  
自定义点
对于涉及使用参数的每个解决方案元素,将提供一个包含描述所有可用参数的表格的二级分区。这可用于 API 方法、XML 元素、JSP 标记等。对表格使用以下模板:
WTKeyStore.java API: public WTKeyStore(final String product_root)
参数
默认值
可能的值
必需?
说明
product_root
字符串
该字符串是主位置 (<Windchill> 或 <adapater_home>) 的完全限定路径。
WTKeyStore.java API: public String get(final String key)
参数
默认值
可能的值
必需?
说明
key
字符串
该字符串是用于从 Java 密钥库检索值的键
WTKeyStore.java API: public put(final String key, final String value)
参数
默认值
可能的值
必需?
说明
key
字符串
该字符串是用于从 Java 密钥库检索值的键
value
字符串
该字符串是将放入 Java 密钥库的值
WTKeyStore.java API: public String remove(final String key)
参数
默认值
可能的值
必需?
说明
key
字符串
该字符串是将从 Java 密钥库中移除的值键
WTKeyStoreUtil.java API: public static String decryptProperty(final String property_value, final String product_root)
参数
默认值
可能的值
必需?
说明
property_value
字符串
该字符串是可能需要解密的值
product_root
字符串
该字符串是主位置 (<Windchill> 或 <adapater_home>) 的完全限定路径。
WTKeyStoreUtil.java API: public static String decryptProperty(final String property_name, final String property_value, final String product_root)
参数
默认值
可能的值
必需?
说明
property_name
字符串
该字符串为特性名称
property_value
字符串
该字符串是可能需要解密的值
product_root
字符串
该字符串是主位置 (<Windchill> 或 <adapater_home>) 的完全限定路径。
WTKeyStoreUtil.java API: private static String getEncryptionPropertiesRegExList(final String product_root)
参数
默认值
可能的值
必需?
说明
product_root
字符串
该字符串是主位置 (<Windchill> 或 <adapater_home>) 的完全限定路径。
EncryptPasswords.xml API:运行 Ant -f EncryptPasswords.xml -projecthelp 以查看可用命令和使用情况的完整列表。
参数
默认值
可能的值
必需?
说明
wt.home
env.WT_HOME
env.wt_home
../../../.
默认值为环境变量 WT_HOME,然后是 wt_home,最后是规范路径 ../../../。
字符串
该字符串是主位置 (<wt_home> 或 <adapater_home>) 的完全限定路径的字符串。
限制
需要从服务器端访问已加密特性,因为出于安全考虑,加密机制依赖于不能从客户端进行 web 访问的位置。用于加密和解密特性的性能费用最小。但应注意的是,Java 密钥库的基础实现依赖于单态模式,并且对密钥库的访问是同步的。
示例代码
为 Windchill 创建 Java 密钥库以对值进行加密:
try
{
WTKeyStore keyStore = new
WTKeyStore(WTProperties.getLocalProperties(). getProperty("wt.home"));
}catch(IOException e){
logger.error("Could not load keystore", e);
}
在密钥库中加密值:
String value = “encrypted.wt.pom.dbPassword”;
String property = “wt.pom.dbPassword”;
try
{
WTKeyStore keyStore = new
WTKeyStore(WTProperties.getLocalProperties(). getProperty("wt.home"));
// encrypt property value
keyStore.put(property, value);
} catch (IOException ioe) {
logger.error("Error creating keystore: ", ioe);
} catch (NullPointerException npe) {
logger.error("Could not add the encrypted value to the keystore: ", npe);
}
解密特性:
String product_root = WTProperties.getLocalProperties(). getProperty(“wt.home”);
String value = “encrypted.wt.pom.dbPassword”;
String property = “wt.pom.dbPassword”;
// decrypt encrypted values
value = WTKeyStoreUtil.decryptProperty(property, value, product_root);
/* value can now be used as normal as it will contain the decrypted value */
此外,还可使用次要方法来解密值:
String value = “encrypted.wt.pom.dbPassword”;
try
{
WTKeyStore keyStore = new
WTKeyStore(WTProperties.getLocalProperties(). getProperty("wt.home"));
// decrypt encrypted values
String ks_value = keyStore.get(value);
if(ks_value != null)
{
value = ks_value;
}
}catch(IOException e){
logger.error("Could not load keystore", e);
}
添加用于加密动态特性的新正则表达式:
/* This code currently exists in WTKeystoreUtil.java. except where
* where denoted “NEW”
*/
private static final String NEW_REGULAR_EXPRESSION = “<your regular
expression goes here>”; // NEW

private static List<String> getEncryptionPropertiesRegExList(final
String product_root) {
List<String> propertiesList = new ArrayList<String>();

if(isCompletePropertiesListFile(product_root)) {
/*
* add a hardcoded list of dynamic properties that will
* utilize regular expressions to determine what to encrypt
* for dynamic property names.
*/
propertiesList.add(WT_FEDERATION_DEFAULTAUTHORIZATION);
propertiesList.add(NEW_REGULAR_EXPRESSION); // NEW
logger.debug("Full property list found, returning regex
list of size=" + propertiesList.size());
} else {
logger.debug("Full property list not found, return empty
regex list");
}
return propertiesList;
}
这将添加用于匹配特性名称模式的新正则表达式。同样,必须谨慎创建正则表达式。请参阅过程 - 加密静态 .xconf 托管的单值特性主题中的“过程 - 加密动态 .xconf 托管的单值特性”一节。
Windchill 代码中的使用示例
wt.dataservice.DSPropertiesServer.java
此 Java 类与 DSProperties.java 配合使用,用于解密显示为已加密的特性值。此类使用反射来确保 DSPropertiesServer 位于服务器上,而不是客户端上。
com.ptc.wvs.server.cadagent.Inifile.java
此 Java 类实现的方法用于解密作为非 .xconf 文件托管特性的特性。
com.ptc.windchill.keystore.WTKeyStoreUtilWVS.java
此 Java 类实现的方法用于加密作为非 .xconf 文件托管特性的特性。
com.ptc.windchill.keystore.WTKeyStoreUtil.java
此 Java 类实现的方法用于加密作为 .xconf 文件托管特性的动态特性。