tomcat通过jdbc连接Oracle12c时报ORA-28040:没有匹配的验证协议错误
提示:Invocation of init method failed; nested exception is java.sql.SQLException: ORA-28040: 没有匹配的验证协议
问题背景
在部署公司产品时,启动tomcat,页面无法打开,查看tomcat运行日志发现,程序报:Invocation of init method failed; nested exception is java.sql.SQLException: ORA-28040: 没有匹配的验证协议
问题原因
查阅Oracle官网发现,oracle、jdk、ojdbc三者存在对应关系,而我的环境为Oracle12c+jdk1.8+ojdbc14(公司程序包)
处理过程
尝试的第一种方法是修改服务器上的sqlnet.ora文件:
文件路径:oracle安装目录\dbhome_1\NETWORK\ADMIN\sqlnet.ora;将该文件末尾加上:SQLNET.ALLOWED_LOGON_VERSION=8,尝试之后以失败告终。
尝试的第二种方法是替换程序包中的ojdbc.jar包
ojdbc7.jar包可以从Oracle客户端程序安装路径获取,获取路径为:\product\11.2.0\client_1\jdbc\lib,选择对应的jar包替换WEB_INFO下的ojdbc14.jar包,启动程序,成功启动。
第三种方法替换jdk中的jar包(推荐此方法):
由于公司是产品级的项目,程序经常迭代,需要频繁替换java文件夹,使用第二种方法没次升级都需要替换jar包,比较繁琐,于是了解到java项目jar包的加载顺序为jdk>tomcat>web,因此可以直接将此jar包放到了jdk安装路径下的jre\lib\ext路径下,问题解决