java aws访问授权 实例_java – 使用IAM身份验证和Spring JDBC访问AWS ...
您可以使用以下代码段替换SpringBoot / Tomcat提供的默认连接池.它将每10分钟刷新一次令牌密码,因为令牌有效期为15分钟.此外,它假定可以从DNS主机名中提取区域.如果不是这种情况,则需要指定要使用的区域.
public class RdsIamAuthDataSource extends org.apache.tomcat.jdbc.pool.DataSource {
private static final Logger LOG = LoggerFactory.getLogger(RdsIamAuthDataSource.class);
/**
* The Java KeyStore (JKS) file that contains the Amazon root CAs
*/
public static final String RDS_CACERTS = "/rds-cacerts";
/**
* Password for the ca-certs file.
*/
public static final String PASSWORD = "changeit";
public static final int DEFAULT_PORT = 3306;
@Override
public ConnectionPool createPool() throws SQLException {
return pool != null ? pool : createPoolImpl();
}
protected synchronized ConnectionPool createPoolImpl() throws SQLException {
return pool = new RdsIamAuthConnectionPool(poolProperties);
}
public static class RdsIamAuthConnectionPool extends ConnectionPool implements Runnable {
private RdsIamAuthTokenGenerator rdsIamAuthTokenGenerator;
private String host;
private String region;
private int port;
private String username;
private Thread tokenThread;
public RdsIamAuthConnectionPool(PoolConfiguration prop) throws SQLException {
super(prop);
}
@Override
protected void init(PoolConfiguration prop) throws SQLException {
try {
URI uri = new URI(prop.getUrl().substring(5));
this.host = uri.getHost();
this.port = uri.getPort();
if (this.port < 0) {
this.port = DEFAULT_PORT;
}
this.region = StringUtils.split(this.host,'.')[2]; // extract region from rds hostname
this.username = prop.getUsername();
this.rdsIamAuthTokenGenerator = RdsIamAuthTokenGenerator.builder().credentials(new DefaultAWSCredentialsProviderChain()).region(this.region).build();
updatePassword(prop);
final Properties props = prop.getDbProperties();
props.setProperty("useSSL","true");
props.setProperty("requireSSL","true");
props.setProperty("trustCertificateKeyStoreUrl",getClass().getResource(RDS_CACERTS).toString());
props.setProperty("trustCertificateKeyStorePassword", PASSWORD);
super.init(prop);
this.tokenThread = new Thread(this, "RdsIamAuthDataSourceTokenThread");
this.tokenThread.setDaemon(true);
this.tokenThread.start();
} catch (URISyntaxException e) {
throw new RuntimeException(e.getMessage());
}
}
@Override
public void run() {
try {
while (this.tokenThread != null) {
Thread.sleep(10 * 60 * 1000); // wait for 10 minutes, then recreate the token
updatePassword(getPoolProperties());
}
} catch (InterruptedException e) {
LOG.debug("Background token thread interrupted");
}
}
@Override
protected void close(boolean force) {
super.close(force);
Thread t = tokenThread;
tokenThread = null;
if (t != null) {
t.interrupt();
}
}
private void updatePassword(PoolConfiguration props) {
String token = rdsIamAuthTokenGenerator.getAuthToken(GetIamAuthTokenRequest.builder().hostname(host).port(port).userName(this.username).build());
LOG.debug("Updated IAM token for connection pool");
props.setPassword(token);
}
}
}
请注意,您需要导入Amazon的根/中间证书才能建立可信连接.上面的示例代码假定证书已导入到名为“rds-cacert”的文件中,并且在类路径中可用.或者,您也可以将它们导入JVM的“cacerts”文件中.
要使用此数据源,可以使用Spring的以下属性:
datasource:
url: jdbc:mysql://dbhost.xyz123abc.us-east-1.rds.amazonaws.com/dbname
username: iam_app_user
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.mydomain.jdbc.RdsIamAuthDataSource
使用Spring Java配置:
@Bean public DataSource dataSource() {
PoolConfiguration props = new PoolProperties();
props.setUrl("jdbc:mysql://dbname.abc123xyz.us-east-1.rds.amazonaws.com/dbschema");
props.setUsername("iam_dbuser_app");
props.setDriverClassName("com.mysql.jdbc.Driver");
return new RdsIamAuthDataSource(props);
}
java aws访问授权 实例_java – 使用IAM身份验证和Spring JDBC访问AWS ...相关推荐
- java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...
java ldap操作实例 LDAP身份验证是世界上最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft为Windows提供的LDAP实现)是另一种广泛使用的 ...
- java实现iam登录认证_是否可以通过Cloudfront对API网关进行IAM身份验证?
是否可以通过Cloudfront将IAM角色身份验证用于API网关 endpoints ? 这是一个基本用例: / api - > API网关 / * - > S3 HTML / Java ...
- iam身份验证以及访问控制_如何将受限访问IAM用户添加到EKS群集
iam身份验证以及访问控制 介绍 (Introduction) Elastic Kubernetes Service (EKS) is the fully managed Kubernetes ser ...
- IAM(身份验证以及访问控制)
1.简述 IAM(IDENTITY & ACCESS MANAGEMENT),身份验证以及访问控制,一种对资源提供可控安全的访问解决方案,现在的公有云基本都支持IAM来对公有云资源提供授权访问 ...
- hbase java 端口_HBase远程Java客户端尝试通过随机端口进行身份验证
我想将本地java/scala进程连接到远程HBase服务器(v 1.1.2)(在docker中).我有以下代码:HBase远程Java客户端尝试通过随机端口进行身份验证 val config = H ...
- Http基本身份验证在Spring Security中如何工作?
在上一篇文章中,您学习了如何在基于Spring安全性的Java应用程序中启用Http基本身份验证 ,现在,我们将进一步进一步了解http基本身份验证在Spring安全性中的工作原理. 如果您还记得的话 ...
- 使用API身份验证的Spring Security
背景 尽管有许多博客文章详细介绍了如何使用Spring Security,但是当问题域位于标准LDAP或数据库身份验证之外时,我仍然经常发现配置挑战. 在本文中,我将介绍一些针对Spring Secu ...
- java反射创建实例_Java反射创建实例
Java反射创建实例 package com.wkcto.chapter08.demo02; import java.lang.reflect.Constructor; import java.lan ...
- java邮件程序实例_java 发送邮件简单实例
全部代码: EmailAuthenticator.java package com.gjw.test; import javax.mail.Authenticator; import javax.ma ...
最新文章
- [干货]我如何考察面试者的机器学习水平
- 英特尔双倍功耗换性能,放话12代酷睿i9超越M1 Max,网友:可以煎鸡蛋了?
- python实现数据库事务回滚_使用Python脚本实现MySQL误操作的快速回滚
- 崛企问卷调查小程序模块V1.3.2
- 南通大学教务管理微信体验
- Cartopy 中的地图投影
- Control-车辆动力学模型
- 要求:弹出框接收字符串输入 			输入aaabbbcccddd 输出3a3b3c3d
- web——216中安全色
- 【白板动画制作软件】万彩手影大师教程 | 调节动作播放时长
- 使用豆瓣音乐API笔记
- 周迅与李大齐分手后首谈旧爱:诚实面对自己的想法
- 美国交通事故分析(2017)(项目练习_5)
- java中的Dao类,model类是什么意思
- vue 海康视频播放
- IDEA中把springboot项目中工具类打成jar包,其他项目进行依赖引用
- 蓝桥杯练习系统[C++]
- 改变世界的17个方程式
- 「面试必背」Spring Cloud面试题(2022最新版)
- (附源码)springboot课程评价系统 毕业设计 211004