Geronimo V2.1.5 中的安全提升
2010-07-02 00:00:00 来源:WEB开发网如果 server 处于启动的状态,并且没有配置过其它的加密方式的话,那么如下命令
deploy.sh encrypt secret
也只是采用默认的简单加密方式,结果与清单 3 所示的密文相同。但是,若服务器配置过其它加密方式,则这个命令会利用这个指定的方式加密明文。
配置一个自定义的加密方式十分简单,只需要编写一个实现了 Encryption 接口的 GBean,并在其 doStart 方法中将自己注册到 EncryptionManger 中去。如清单4所示。
清单 4. 自定义加密方式的 GBean 模板
public class MyEncryption implements Encryption, GBeanLifecycle {
public void doStart() throws Exception {
EncryptionManager.setEncryptionPrefix("{MyEncryptionPrefix}", this);
}
String encrypt(Serializable source) {
...
}
Serializable decrypt(String source) {
...
}
}
在部署计划中使用加密后的密码
Geronimo V2.1.5 中为 GAttributeInfo 增加了一个新的标志位:
private final boolean encrypted;
用于指定一个 GBean 中的某个属性是否是加密的。默认情况下,如果 GBean 属性的名称中含有”password”字符串,则其对应的 GAttributeInfo 对象的这个标志位会自动初始化为 true,否则则需要在 GBean 对象构造的时候指明。通过这样的改进,我们就可以在部署计划中写入加密后密码。清单 5 是一个例子。
清单 5. 在数据源的部署计划中使用加密后的密码
<connector xmlns="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2"
xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.2">
<dep:environment>
<dep:moduleId>
<dep:groupId>org.apache.geronimo.rex</dep:groupId>
<dep:artifactId>EmployeeDatasource</dep:artifactId>
<dep:version>2.1.5</dep:version>
<dep:type>rar</dep:type>
</dep:moduleId>
<dep:dependencies>
<dep:dependency>
<dep:groupId>org.apache.geronimo.configs</dep:groupId>
<dep:artifactId>system-database</dep:artifactId>
<dep:type>car</dep:type>
</dep:dependency>
</dep:dependencies>
</dep:environment>
<resourceadapter>
<outbound-resourceadapter>
<connection-definition>
<connectionfactory-interface>javax.sql.DataSource</connectionfactory-interface>
<connectiondefinition-instance>
<name>jdbc/EmployeeDatasource</name>
<config-property-setting name="UserName">rex</config-property-setting>
<config-property-setting name="Password">{Simple}rO0ABXNy
ABlqYXZheC5jcnlwdG8uU2VhbGVkT2JqZWN0Pj
Y9psO3VHACAARbAA1lbmNvZGVkUGFyYW1zdAACW0JbABBlbmNyeX
B0ZWRDb250ZW50cQB+AAFMAAlwYXJhbXNBbGd0ABJMamF2YS
9sYW5nL1N0cmluZztMAAdzZWFsQWxncQB+AAJ4cHB1cgACW0Ks8xf4Bgh
U4AIAAHhwAAAAEArVToThqcjvbXFD5C2uUmpwdAADQUVT</config-property-setting>
<config-property-setting name="DatabaseName">Employee</config-property-setting>
<config-property-setting name="CreateDatabase">true</config-property-setting>
<connectionmanager>
<xa-transaction>
<transaction-caching/>
</xa-transaction>
<single-pool>
<max-size>5</max-size>
<min-size>0</min-size>
<blocking-timeout-milliseconds>5000</blocking-timeout-milliseconds>
<idle-timeout-minutes>15</idle-timeout-minutes>
<match-one/>
</single-pool>
</connectionmanager>
<!--global-jndi-name>EmployeeDatasource</global-jndi-name-->
</connectiondefinition-instance>
</connection-definition>
</outbound-resourceadapter>
</resourceadapter>
</connector>
更多精彩
赞助商链接