Java 使用Oracle钱包的Tomcat 8 JNDI和Oracle
在工作中,我试图让Tomcat 8.5.34应用程序通过使用Oracle Wallet的TCPS连接到Oracle DB 12.2.0.1 我使用了许多不同的GUI,并执行了以下操作:Java 使用Oracle钱包的Tomcat 8 JNDI和Oracle,java,tomcat,jdbc,oracle12c,ojdbc,Java,Tomcat,Jdbc,Oracle12c,Ojdbc,在工作中,我试图让Tomcat 8.5.34应用程序通过使用Oracle Wallet的TCPS连接到Oracle DB 12.2.0.1 我使用了许多不同的GUI,并执行了以下操作: -Doracle.net.tns_admin=< wallet files location with tnsora> -Doracle.net.wallet_location="(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY=< wallet f
-Doracle.net.tns_admin=< wallet files location with tnsora>
-Doracle.net.wallet_location="(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY=< wallet files location with tnsora>)))"
在catalina lib/文件夹中添加了oraclepki.jar、ojdbc8.jar、osdt_core.jar和osdt_core.jar
修改了java.security提供程序,将oracle.security.pki.OraclePKIProvider包含在列出的提供程序的底部
我将JNDI连接器配置为通过别名连接到数据库
在Tomcat的setenvs.sh中,我添加了以下内容:
-Doracle.net.tns_admin=< wallet files location with tnsora>
-Doracle.net.wallet_location="(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY=< wallet files location with tnsora>)))"
奇怪的是,我用Java编写了一个快速测试应用程序,并成功地连接了
java -Doracle.net.tns_admin="< wallet files location with tnsora>" -Doracle.net.wallet_location="(SOURCE=(METHOD=FILE) (METHOD_DATA = (DIRECTORY=< wallet files location with tnsora>)))" -cp ./lib/ojdbc8.jar:/root:./lib/oraclepki.jar:./lib/osdt_core.jar:./lib/osdt_cert.jar DataSourceSample
AArray = [B@6328d34a
AArray = [B@145eaa29
AArray = [B@15bb6bea
AArray = [B@52aa2946
AArray = [B@4de5031f
AArray = [B@67e2d983
Driver Name: Oracle JDBC driver
Driver Version: 12.2.0.1.0
Default Row Prefetch Value is: 20
Database Username is: <Name of the Database>
....
....
Results
java-Doracle.net.tns_admin=“”-Doracle.net.wallet_location=“(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=)”-cp./lib/ojdbc8.jar:/root:./lib/oraclepki.jar:./lib/osdt\u core.jar:./lib/osdt\u cert.jar数据源示例
阿雷=[B@6328d34a
阿雷=[B@145eaa29
阿雷=[B@15bb6bea
阿雷=[B@52aa2946
阿雷=[B@4de5031f
阿雷=[B@67e2d983
驱动程序名称:Oracle JDBC驱动程序
驱动程序版本:12.2.0.1.0
默认行预取值为:20
数据库用户名为:
....
....
结果
我用尽了所有可能的选择
**更新1**
我对Tomcat进行了扫描。我可以确认Tomcat确实看到了钱包文件:
[pid 21880]lstat(“/cwallet.sso”,{st_mode=S_IFREG | 0700,st_size=4741,…})=0
[pid 21880]stat(“/cwallet.sso.lck”,{st_mode=S_IFREG | 0600,st_size=0,…})=0
[pid 21880]stat(“/oracle_wallets/cwallet.sso.lck”,{st_mode=S_IFREG | 0600,st_size=0,…})=0
[pid 21880]stat(“/cwallet.sso.lck”,{st_mode=S_IFREG | 0600,st_size=0,…})=0
[pid 21880]chmod(“/cwallet.sso.lck”,0100200)=0最终通过不使用Oracle钱包文件解决了问题,而是首先使用用于创建Oracle钱包的相同JKS文件 Oracle数据库使用Oracle钱包本身,但在Tomcat方面,您可以使用JKS方法
- url=“jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCPS)(HOST=)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=
))” - connectionProperties=“javax.net.ssl.trustStore=./keystore/oracle_keystore/mykeystore.jks;javax.net.ssl.trustStorePassword=changeme;javax.net.ssl.trustStoreType=jks;javax.net.ssl.keystore=./keystore/oracle_keystore/mykeystore.jks;javax.net.ssl.keyStoreType=jks;”
所使用的路径是什么?运行tomcat进程的用户是否有权访问该文件?我尝试以tomcat用户的身份运行Java应用程序,因此文件系统权限应该可以