如何将Tomcat中配置的JDBC连接迁移至Jetty容器?
嘿,我来帮你把这个Tomcat+JAX-RS+Oracle加密数据源的配置内容整理得清晰明了,结合你的场景梳理关键要点:
核心场景回顾
你之前在项目中用Tomcat作为容器托管JAX-RS REST API,通过JDBC连接Oracle数据库,为了避免明文存储数据库密码,还自定义了加密数据源工厂,相关配置放在META-INF/context.xml文件中。
关键配置代码片段
你的context.xml数据源配置如下:
<Resource name="jdbc/myconnmapping" factory="my.package.EncryptedDataSourceFactory" auth="Container" type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@//my.oracle.server:1555/jobctlss1" username="TOM" password="NQp5gwJdXs5KIts4OqiFN1qI/HhhRs9/eeO2lwVV..." />
配置核心要点说明
- 自定义加密数据源工厂:
factory指定的my.package.EncryptedDataSourceFactory是整个配置的核心,它负责在Tomcat初始化数据源时,解密password字段里的加密字符串,还原成真实的数据库密码,解决明文密码的安全隐患。 - 容器级认证管理:
auth="Container"表示由Tomcat容器全权负责数据源的认证逻辑,你的JAX-RS应用不需要手动处理用户名密码的校验,直接通过容器获取可用的数据源即可。 - Oracle JDBC驱动指定:
driverClassName明确了Oracle官方的JDBC驱动类,确保Tomcat能正确加载驱动,建立和Oracle数据库的连接。 - 加密密码存储:
password字段是加密后的密文,只有你的自定义工厂类能解析解密,这也是你这套配置的安全核心。
JAX-RS中使用该数据源的常规方式
在JAX-RS的资源类中,你可以通过JNDI注入的方式获取这个加密数据源,示例代码如下:
import javax.annotation.Resource; import javax.sql.DataSource; import javax.ws.rs.GET; import javax.ws.rs.Path; import java.sql.Connection; import java.sql.SQLException; @Path("/data") public class DataResource { @Resource(name = "jdbc/myconnmapping") private DataSource dataSource; @GET @Path("/test") public String testDbConnection() { try (Connection conn = dataSource.getConnection()) { return "Oracle数据库连接成功!"; } catch (SQLException e) { return "连接失败:" + e.getMessage(); } } }
内容的提问来源于stack exchange,提问作者aiman
相关产品推荐
相关产品推荐

