AI智能
改变未来

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 =ad8response.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、完整代码

查看代码

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 href=\"http://www.itez.com.cad0n\">上游科技</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*1044</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>* 创建客户端实例* </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);}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JAVA实现对阿里云DNS的解析管理