在最近的一个SAAS后台管理项目中需要为每个租户绑定不同的域名,为了解决需求,于是采用代码调用阿里云的DNS域名在线解析API
阿里云域名相关信息
- 域名在线解析地址
https://dns.console.aliyun.com/ - API文档地址
https://api.aliyun.com/?spm=5176.100251.products-recent.ddns.4dd64f15wz4Yfc#/?product=Alidns - 没有域名的朋友也可以在阿里云上进行购买,一些简单的域名还是很便宜的
https://mi.aliyun.com/
JAVA代码相关配置
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-alidns</artifactId>
<version>2.0.10</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
public class AliConfig {
public static final String DNS_ACCESS_KEY_ID = "自己的accesskey";
public static final String DNS_SECRET = "自己的secret";
}
public static boolean getDomainInfo(String domain){
IAcsClient client = new DefaultAcsClient(profile);
DescribeDomainInfoRequest request = new DescribeDomainInfoRequest();
request.setSysRegionId(REGION_ID);
request.setDomainName(domain);
try {
DescribeDomainInfoResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
if(response!=null){
return true;
}
} catch (ServerException e) {
e.printStackTrace();
ExceptionCast.cast(e.getErrCode());
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
ExceptionCast.cast(e.getErrCode());
}
return false;
}
public static Long getDescribeDomainRecords(String domain,String rrKeyWord) {
IAcsClient client = new DefaultAcsClient(profile);
DescribeDomainRecordsRequest request = new DescribeDomainRecordsRequest();
request.setDomainName(domain);
request.setKeyWord(rrKeyWord);
request.setSearchMode("EXACT");
request.setSysRegionId(REGION_ID);
try {
DescribeDomainRecordsResponse response = client.getAcsResponse(request);
String result = new Gson().toJson(response);
System.out.println(result);
return response.getTotalCount();
} catch (ServerException e) {
e.printStackTrace();
ExceptionCast.cast(e.getErrMsg());
} catch (ClientException e) {
ExceptionCast.cast(e.getErrMsg());
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
return 0L;
}
public static Long addDomainRecord(String domain,String value,String rr) {
IAcsClient client = new DefaultAcsClient(profile);
AddDomainRecordRequest request = new AddDomainRecordRequest();
request.setSysRegionId(REGION_ID);
request.setDomainName(domain);
request.setRR(rr);
request.setType("A");
request.setValue(value);
try {
AddDomainRecordResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
return null;
}
public static boolean setDomainRecordStatus(String recordId,String status){
IAcsClient client = new DefaultAcsClient(profile);
SetDomainRecordStatusRequest request = new SetDomainRecordStatusRequest();
request.setRegionId(REGION_ID);
request.setRecordId(recordId);
request.setStatus(status);
try {
SetDomainRecordStatusResponse response = client.getAcsResponse(request);
System.out.println(new Gson().toJson(response));
return true;
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
return false;
}
到此为止域名在线解析的工具类已经准备完成,直接在逻辑代码中调用上述接口即可,本篇播客并没有过多的理论与详细解析,如果需要更多的了解,可以查看官方API文档,描述非常详细!有问题也可以留言告诉我!