将Cyber​​Ark EPV数据源配置为Tomcat JNDI

时间:2018-10-01 16:24:43

标签: java spring tomcat jndi cyber-ark

我们的应用程序通过使用嵌入式JDBC数据源(即通过用户名/密码/连接字符串)或在大型客户不想与纯文本属性文件混在一起的情况下使用JNDI,在不同的客户上工作。

这是由Spring控制的

<beans profile="JNDIDS">
    <jee:jndi-lookup id="dataSource" jndi-name="${database.jndi}" resource-ref="true" />
</beans>

当我配置纯文本数据源时,以上内容在Jboss,Websphere和Tomcat 8上成功运行。

我们的一位客户被要求即使在其配置文件中使用Tomcat的server.xml,也不要在任何配置文件中使用纯文本密码,因此他们已经集成了Cyber​​Ark EPV(企业密码库)。

我一直跟随他们实施标准配置,但没有成功

server.xml

<Resource name="DB-Global" auth="Container" type="oracle.jdbc.pool.OracleDataSource"
  driverClassName="oracle.jdbc.driver.OracleDriver" vendorFactoryClass="oracle.jdbc.pool.OracleDataSourceFactory" factory="com.cyberark.aim.v550.tomcat.ASCPDataSourceFactory" 
  url="(redacted)" userPropertyName="user" passwordPropertyName="password" maxActive="20" maxIdle="10" maxWait="-1" ascp.connectionPort="18923" ascp.appId="(redacted)" 
  ascp.query="(redacted)" ascp.connectionTimeOut="30" ascp.reason="To retrieve the password for appID (redacted)"/>

context.xml

<ResourceLink name="DB" global="DB-Global" type="oracle.jdbc.pool.OracleDataSource" />

数据库JNDI等于java:/comp/env/DB

不幸的是,在启动时出现以下错误

Caused by: javax.naming.NamingException: The local resource link [DB] that refers to global resource [DB-Global] was expected to return an instance of [oracle.jdbc.pool.OracleDataSource] but returned an instance of [com.cyberark.aim.v550.tomcat.ASCPDataSource]
    at org.apache.naming.NamingContext.lookup(NamingContext.java:864) ~[catalina.jar:8.0.47]
    at org.apache.naming.NamingContext.lookup(NamingContext.java:158) ~[catalina.jar:8.0.47]
    at org.apache.naming.NamingContext.lookup(NamingContext.java:835) ~[catalina.jar:8.0.47]
    at org.apache.naming.NamingContext.lookup(NamingContext.java:158) ~[catalina.jar:8.0.47]
    at org.apache.naming.NamingContext.lookup(NamingContext.java:835) ~[catalina.jar:8.0.47]
    at org.apache.naming.NamingContext.lookup(NamingContext.java:172) ~[catalina.jar:8.0.47]
    at org.apache.naming.SelectorContext.lookup(SelectorContext.java:157) ~[catalina.jar:8.0.47]
    at javax.naming.InitialContext.lookup(InitialContext.java:417) ~[?:1.8.0_141]
    at org.springframework.jndi.JndiTemplate$1.doInContext(JndiTemplate.java:155) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:87) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:179) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:106) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:231) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:217) ~[spring-context-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
    ... 27 more

以上是我的客户发送的最新错误。 我知道,在此配置中可能存在错误。实际上,数据源类不应为OracleDataSource(尽管我们正在运行Oracle),而应为更通用的javax.sql.DataSource。这是因为ACSP 很可能将Oracle的数据源包装到其自己的数据源中。

即使我请求在javax.sql.DataSource的任何地方都应用OracleDataSource,我也会遇到相同的错误,这一次是说com.cyberark.aim.v550.tomcat.ASCPDataSource不可分配给javax.sql.DataSource

问题是:如何配置Cyber​​ark EPV数据源以在Tomcat 8.0中工作?

0 个答案:

没有答案