JAVA实现对阿里云DNS的解析管理
1、阿里云DNS的SDK依赖
|
<dependency> |
|
<groupId>com.aliyun</groupId> |
|
<artifactId>tea-openapi</artifactId> |
|
<version>0.0.19</version> |
|
</dependency> |
|
<dependency> |
|
<groupId>com.aliyun</groupId> |
|
<artifactId>alidns20150109</artifactId> |
|
<version>2.0.1</version> |
|
</dependency> |
2、第一个方法:创建SDK客户端实例
所有解析记录的操作都要通过这个客户端实例来进行,所以要首先创建这个实例,需要阿里云的AccessKey(AppId和AppSecret)
|
/** |
|
* <p> |
|
* 创建客户端实例 |
|
* </p> |
|
* |
|
* @return |
|
* @throws Exception |
|
*/ |
|
private Client createClient() throws Exception{ |
|
AliConfig api = APIKit.getAliConfig(); //返回阿里云的AccessKey参数 |
|
if(api == null) throw new ErrException("未配置阿里云API参数!"); |
|
Config config = new Config(); |
|
config.accessKeyId = api.getAppId(); |
|
config.accessKeySecret = api.getAppSecret(); |
|
config.endpoint = "alidns.cn-beijing.aliyuncs.com"; |
|
return new Client(config); |
|
} |
3、第二个方法:返回指定的记录ID(RecordId)
在阿里云的SDK中,对解析记录进行修改和删除时,都需要传入 RecordId 这个参数,所以提前写一个获取记录ID的方法。
|
/** |
|
* <p> |
|
* 返回指定主机记录的ID,不存在时返回null |
|
* </p> |
|
* |
|
* @param DomainName |
|
* @param RR 记录名称 |
|
* @return |
|
*/ |
|
private String getRecId(Client client, String DomainName, String RR){ |
|
String recId = null; |
|
try { |
|
DescribeDomainRecordsRequest request = new DescribeDomainRecordsRequest(); |
|
request.setDomainName(DomainName); |
|
request.setRRKeyWord(RR); |
|
DescribeDomainRecordsResponse response = client.describeDomainRecords(request); |
|
if(response.getBody().getTotalCount() > 0){ |
|
List<DescribeDomainRecordsResponseBodyDomainRecordsRecord> recs = response.getBody().getDomainRecords().getRecord(); |
|
for(DescribeDomainRecordsResponseBodyDomainRecordsRecord rec: recs){ |
|
if(rec.getRR().equalsIgnoreCase(RR)){ |
|
recId = rec.getRecordId(); |
|
break; |
|
} |
|
} |
|
} |
|
} catch (Exception e) { |
|
} |
|
return recId; |
|
} |
4、第三个方法:添加或修改指定的记录
方便起见,这里我将添加和修改集成到了一个方法,相当于SaveOrUpdate。
|
/** |
|
* <p> |
|
* 添加或修改解析记录 |
|
* </p> |
|
* |
|
* @param DomainName 域名 |
|
* @param RR 记录名称 |
|
* @param Type 记录类型(A、AAAA、MX、TXT、CNAME) |
|
* @param Value 记录值 |
|
*/ |
|
public void update(String DomainName, String RR, String Type, String Value){ |
|
try { |
|
if(EStr.isEmpty(DomainName)) throw new RuntimeException("域名(DomainName)为空!"); |
|
if(EStr.isEmpty(RR)) throw new RuntimeException("主机记录(RR)为空!"); |
|
if(EStr.isEmpty(Type)) throw new RuntimeException("记录类型(Type)为空!"); |
|
if(EStr.isEmpty(Value)) throw new RuntimeException("记录值(Value)为空!"); |
|
Client client = createClient(); |
|
String recId = getRecId(client, DomainName, RR); |
|
if(EStr.isNull(recId)){ //添加 |
|
AddDomainRecordRequest request = new AddDomainRecordRequest(); |
|
request.setDomainName(DomainName); |
|
request.setRR(RR); |
|
request.setType(Type); |
|
request.setValue(Value); |
|
AddDomainRecordResponse response = client.addDomainRecord(request); |
|
recId = response.getBody().getRecordId(); |
|
}else{ //修改 |
|
UpdateDomainRecordRequest request = new UpdateDomainRecordRequest(); |
|
request.setRecordId(recId); |
|
request.setRR(RR); |
|
request.setType(Type); |
|
request.setValue(Value); |
|
UpdateDomainRecordResponse response = client.updateDomainRecord(request); |
|
recId = response.getBody().getRecordId(); |
|
} |
|
renderJson(Result.success("recId", recId)); |
|
} catch (Exception e) { |
|
renderJson(Result.fail(e.getMessage())); |
|
} |
|
} |
5、第四个方法:删除指定的记录
这个很简单,根据查找到的RecordId直接删除即可。
|
/** |
|
* <p> |
|
* 删除记录 |
|
* </p> |
|
* |
|
* @param DomainName |
|
* @param RR |
|
*/ |
|
public void remove(String DomainName, String RR){ |
|
try { |
|
if(EStr.isEmpty(DomainName)) throw new RuntimeException("域名(DomainName)为空!"); |
|
if(EStr.isEmpty(RR)) throw new RuntimeException("主机记录(RR)为空!"); |
|
Client client = createClient(); |
|
String recId = getRecId(client, DomainName, RR); |
|
if(EStr.isNull(recId)){ |
|
renderJson(Result.success("recId", null)); |
|
}else{ |
|
DeleteDomainRecordRequest request = new DeleteDomainRecordRequest(); |
|
request.setRecordId(recId); |
|
DeleteDomainRecordResponse response = client.deleteDomainRecord(request); |
|
renderJson(Result.success("recId", response.getBody().getRecordId())); |
|
} |
|
} catch (Exception e) { |
|
renderJson(Result.fail(e.getMessage())); |
|
} |
|
} |
6、完整代码
查看代码