2016-08-01 4 views
0

Google에서 문제를 찾고자했지만 해결책을 얻을 수 없었습니다. 내가Spring MethodInvokingBean - 반환 된 값이 DriverManagerDataSource에 의해 받아 들여지지 않았습니다.

는 아래의 코드를 볼 달성하기 위해 노력하고 무엇

은, 내가 뭘하려고 정적 메서드 decrypt을 사용하고 해독하는 com.xxxxxxx.CryptoUtil를 사용 MethodInvokingBean에 암호화 된 암호를 전달할 수 있습니다.

암호 해독 된 값이 <property name="password" ref="decryptedDBPassword" />을 통해 masterDBDatasource에 삽입되지만 작동하지 않습니다. 예외

org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.springframework.beans.factory.config.MethodInvokingBean' to required type 'java.lang.String' for property 'password'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.springframework.beans.factory.config.MethodInvokingBean] to required type [java.lang.String] for property 'password': no matching editors or conversion strategy found 

<bean id="decryptedDBPassword" class="org.springframework.beans.factory.config.MethodInvokingBean"> 
     <property name="targetClass" value="com.xxxxxxx.CryptoUtil"/> 
     <property name="targetMethod" value="decrypt"/> 
     <property name="arguments" value="${encrypted.db.password}" /> 
    </bean> 

    <bean id="masterDBDatasource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${db.driver.class}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" ref="decryptedDBPassword" /> 
    </bean> 

나는 참조

https://www.mkyong.com/spring/spring-methodinvokingfactorybean-example/

나는 또한 <property name="password" value="decryptedDBPassword" /> 시도하지만 DB 연결이 말하는대로 아래의 튜토리얼을 따라 - 액세스로 인해 거부 유효하지 않은 비밀번호.

친절히 도움.

답변

0

속성 password은 문자열 값이어야합니다. 문자열을 암호로 요구하는 DriverManagerDataSource에 대한 bean (decryptedPassword) 참조를 전달 중입니다. 귀하가 제공 한 username과 비슷한

<property name="password" value="${db.password} /> 

과 같아야합니다.

해독 된 암호를 전달해야 할 때 패스워드를 처리하기 전에 스프링의 표현식 지원을 살펴볼 수 있습니다.

http://docs.spring.io/spring/docs/3.0.0.M3/spring-framework-reference/html/ch07s04.html

1

유사한 문제에 직면 할 수있는 다른 사람에 대한 참조로 내 문제 코드에 대한 정확한 대답을 게시. 매트의 힌트 @에서

, 나는

<bean id="masterDBDatasource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${db.driver.class}" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value='#{T(com.xxxxxxx.CryptoUtil).decrypt("${encrypted.db.password}")}' /> 
</bean> 
( MethodInvokingBean를 사용하지 않고) SPEL을 사용하여 아래와 같이 최종 설정을
관련 문제