JAVA實現(xiàn)對阿里云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、第一個方法:創(chuàng)建SDK客戶端實例
所有解析記錄的操作都要通過這個客戶端實例來進行,所以要首先創(chuàng)建這個實例,需要阿里云的AccessKey(AppId和AppSecret)
/**
* <p>
* 創(chuàng)建客戶端實例
* </p>
*
* @return
* @throws Exception
*/
private Client createClient() throws Exception{
AliConfig api = APIKit.getAliConfig(); //返回阿里云的AccessKey參數(shù)
if(api == null) throw new ErrException("未配置阿里云API參數(shù)!");
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 這個參數(shù),所以提前寫一個獲取記錄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、第三個方法:添加或修改指定的記錄
方便起見,這里我將添加和修改集成到了一個方法,相當(dāng)于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、第四個方法:刪除指定的記錄
這個很簡單,根據(jù)查找到的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、完整代碼
package itez.alidns.controller;
import java.util.List;
import com.aliyun.alidns20150109.Client;
import com.aliyun.alidns20150109.models.AddDomainRecordRequest;
import com.aliyun.alidns20150109.models.AddDomainRecordResponse;
import com.aliyun.alidns20150109.models.DeleteDomainRecordRequest;
import com.aliyun.alidns20150109.models.DeleteDomainRecordResponse;
import com.aliyun.alidns20150109.models.DescribeDomainRecordsRequest;
import com.aliyun.alidns20150109.models.DescribeDomainRecordsResponse;
import com.aliyun.alidns20150109.models.DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord;
import com.aliyun.alidns20150109.models.UpdateDomainRecordRequest;
import com.aliyun.alidns20150109.models.UpdateDomainRecordResponse;
import com.aliyun.teaopenapi.models.Config;
import itez.core.wrapper.controller.ControllerDefine;
import itez.core.wrapper.controller.EController;
import itez.kit.EStr;
import itez.kit.exception.ErrException;
import itez.kit.restful.Result;
import itez.plat.main.model.CompWx;
import itez.plat.main.service.CompWxService;
import itez.weixin.api.ApiConfigKit.ConfigType;
/**
* <p>
* 阿里云DNS解析
* 示例:http://localhost/alidns/update?DomainName=domain.com&RR=test&Type=A&Value=8.8.8.8
* </p>
*
* <p>Copyright(C) 2017-2022 <a >上游科技</a></p>
*
* @author <a href="mailto:netwild@qq.com">Z.Mingyu</a>
* @date 2022年1月12日 下午2:38:31
*/
@ControllerDefine(key = "/alidns", summary = "阿里云DNS解析", view = "/")
public class AliDnsController extends EController {
/**
* <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()));
}
}
/**
* <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()));
}
}
/**
* <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;
}
/**
* <p>
* 創(chuàng)建客戶端實例
* </p>
*
* @return
* @throws Exception
*/
private Client createClient() throws Exception{
AliConfig api = APIKit.getAliConfig(); //返回阿里云的AccessKey參數(shù)
if(api == null) throw new ErrException("未配置阿里云API參數(shù)!");
Config config = new Config();
config.accessKeyId = api.getAppId();
config.accessKeySecret = api.getAppSecret();
config.endpoint = "alidns.cn-beijing.aliyuncs.com";
return new Client(config);
}
}到此這篇關(guān)于JAVA實現(xiàn)對阿里云DNS的解析管理的文章就介紹到這了,更多相關(guān)JAVA 阿里云DNS 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot實現(xiàn)對文件進行壓縮下載功能
在Web應(yīng)用中,文件下載功能是一個常見的需求,特別是當(dāng)你需要提供用戶下載各種類型的文件時,本文將演示如何使用Spring Boot框架來實現(xiàn)一個簡單而強大的文件下載功能,需要的朋友跟隨小編一起學(xué)習(xí)吧2023-09-09
springboot基于Mybatis mysql實現(xiàn)讀寫分離
這篇文章主要介紹了springboot基于Mybatis mysql實現(xiàn)讀寫分離,需要的朋友可以參考下2019-06-06
Java?Spring?boot?配置JDK和MAVEN開發(fā)環(huán)境的過程
本文詳細(xì)介紹了如何配置JDK和Maven環(huán)境,包括JDK的安裝與環(huán)境變量設(shè)置,Maven的下載、配置環(huán)境變量和設(shè)置阿里云倉庫,最后簡述了在IntelliJ?IDEA中配置JDK和Maven的步驟,本教程適合Java開發(fā)新手進行開發(fā)環(huán)境的搭建,確保順利進行Java項目的開發(fā)2024-11-11

