Java 使用Oracle钱包的Tomcat 8 JNDI和Oracle

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

在工作中,我试图让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 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方法

  • 在Tomcat的lib/中添加以下jar文件: ojdbcx.jar(x=Java的相关主要版本,vbl:8)
  • 在./jre/lib/security/java.security中添加以下内容:security.provider.10=oracle.security.pki.OraclePKIProvider
  • 在context.xml中:
    • 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应用程序,因此文件系统权限应该可以