我在这里有一个方法getAWSCredential
,它会返回cred
中的一些值。
@Override
public AWSCredentialDTO getAWSCredential(String user_name) {
AWSCredentialDTO cred= (AWSCredentialDTO) entityManager.createNativeQuery("select * from aws_user_credentials a where a.user_name=:userName",AWSCredentialDTO.class)
.setParameter("userName", user_name).getSingleResult();
return cred;
}
此处我还有一项服务ec2
,我需要在之前的方法中使用cred
中返回的值。
private AmazonEC2 ec2;
public AmazonEC2 ec2() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(aws_access_key_id,
aws_secret_access_key);
return AmazonEC2ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(Regions.AP_SOUTH_1).build();
}
以上两种方法都是单独的类。首先,我将运行getAWSCredential
,然后我将调用ec2
,我需要使用cred
的值。任何人都可以建议我如何实现这一目标?
这是一个春季启动应用程序。
答案 0 :(得分:1)
如果凭据是全局的或在上下文中,您可能希望使用DependencyInjection,您可以创建一个存储凭据的bean或作为代理的EC2实例,以便在其上下文中访问它。用户的会话。
请指定您是否拥有单个用户名/密码,或者您是否拥有多个用户名/密码,并且需要使用用户名或其他用户来提供不同的请求。
如果你有一个,你可以创建一个API密钥并在onclick event
中设置它。您可以使用application.properties
和cloud.aws.credentials.accessKey
。
答案 1 :(得分:1)
您必须创建包含getAWSCredential
的类的spring bean,并在需要它的类中自动装配它。请查看下面的示例代码。
@Component
public class AmazonUtil {
...
@Override
public AWSCredentialDTO getAWSCredential(String user_name) {
AWSCredentialDTO cred= (AWSCredentialDTO) entityManager.createNativeQuery("select * from aws_user_credentials a where a.user_name=:userName",AWSCredentialDTO.class)
.setParameter("userName", user_name).getSingleResult();
return cred;
}
}
@Component
public class Test {
@Autowired
private AmazonUtil amazonUtil;
public AmazonEC2 ec2(String userName) {
AWSCredentialDTO credsDto = amazonUtil.getAWSCredential(userName);
BasicAWSCredentials awsCreds = ...construct using credsDto
return AmazonEC2ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(Regions.AP_SOUTH_1).build();
}
}
答案 2 :(得分:1)
创建一个单独的班级ClassCred
,并在同一班级ClassCred
内为ClassCred credObj = new ClassCred()
创建一个对象。从credObj
方法获取getAWSCredential(String user_name)
,并将cred
方法返回的getAWSCredential
设置为credObj
。现在,对象credObj
具有cred
方法返回的值getAWSCredential
。现在,您可以使用ec2()
方法调用credObj
并获取存储在其中的值。