软件编程
位置:首页>> 软件编程>> java编程>> JAVA实现对阿里云DNS的解析管理

JAVA实现对阿里云DNS的解析管理

作者:网无忌  发布时间:2023-11-24 13:25:15 

标签: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、完整代码

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.cn">上游科技</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>
    * 创建客户端实例
    * </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);
   }  
}

来源:https://www.cnblogs.com/netWild/p/15815757.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com