我有从我的项目的源代码中删除所有密码和加密密钥的要求。我正在努力让这个在spring-servlet.xml文件中工作。在我尝试做出改变之前,这个方法很有效:
数据库用户名、加密密码、url和驱动程序在文件jdbc\u server.properties中定义为类路径资源。
加密/解密密钥在启动时作为-dencryption\u密码传递=
我想将jdbc\u server\u属性文件移到文件系统中,并在文件中包含密钥。
这是我最后一次(至少25次)尝试让它工作。
<bean id="propertyConfigurer" class="org.jasypt.spring4.properties.EncryptablePropertyPlaceholderConfigurer">
<constructor-arg ref="standardEncryptor" />
<property name="jdbcUsername" value="JDBC_USERNAME" />
<property name="jdbcPassword" value="JDBC_PASSWORD" />
<property name="jdbcUrl" value="JDBC_URL" />
<property name="jdbcDriver" value="JDBC_DRIVER" />
<property name="locations">
<list>
<value>file:///${USERPROFILE}/credentials/jdbc_server.properties</value>
</list>
</property>
</bean>
<bean id="standardEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
<property name="config" ref="environmentVariablesConfiguration" />
</bean>
<bean id="environmentVariablesConfiguration" class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
<property name="algorithm" value="PBEWithMD5AndDES" />
<property name="passwordSysPropertyName" value="ENCRYPTION_PASSWORD" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" p:driverClassName="${jdbcDriver}" p:url="${jdbcUrl}"
p:username="${jdbcUsername}" p:password="${jdbcPassword}">
</bean>
使用上面的配置,我得到一个notwritablepropertyexception异常。关于这个问题,我已经看到了很多帖子,但是没有看到文件系统中的属性和加密密钥都在一个文件中。当这个工作时,属性是从类路径中的一个文件中读取的,jdbcustomer(或其他属性)没有getter/setter,所以我不知道为什么它现在会以这种方式失败。
我尝试将getter和setter(作为字符串)添加到我的basedaoimpl类中,但是我仍然得到相同的错误,因此如果我要添加它们,我不确定它们会去哪里。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'propertyConfigurer' defined in ServletContext resource [/WEB-INF/spring-servlet.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'jdbcUsername' of bean class [org.jasypt.spring4.properties.EncryptablePropertyPlaceholderConfigurer]: Bean property 'jdbcUsername' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1568)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1276)
at ...
1条答案
按热度按时间1aaf6o9v1#
那可能是因为
jdbcUsername
不属于EncryptablePropertyPlaceholderConfigurer
.请尝试这样的方法(只需移除
jdbc*
来自EncryptablePropertyPlaceholderConfigurer
配置,并直接在dataSource
豆子):假设你
jdbc_server.properties
文件包含所需信息: