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

 更新时间:2022年01月18日 08:28:23   作者:网无忌  
本文主要介绍了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);
    }  
}

到此这篇关于JAVA实现对阿里云DNS的解析管理的文章就介绍到这了,更多相关JAVA 阿里云DNS 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中treemap和treeset实现红黑树

    java中treemap和treeset实现红黑树

    这篇文章主要为大家详细介绍了java中treemap和treeset实现红黑树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Java使用easyExcel实现导入功能

    Java使用easyExcel实现导入功能

    这篇文章介绍了Java使用easyExcel实现导入功能的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Java虚拟机执行引擎知识总结

    Java虚拟机执行引擎知识总结

    这篇文章主要介绍了有关Java虚拟机执行引擎的知识,文中实例简单易懂,方便大家更好的学习,有兴趣的朋友可以了解下
    2020-06-06
  • ArrayList和LinkedList的区别、扩容机制以及底层的实现方式

    ArrayList和LinkedList的区别、扩容机制以及底层的实现方式

    这篇文章主要介绍了ArrayList和LinkedList的区别、扩容机制以及底层的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java获取中文拼音首字母的实例

    java获取中文拼音首字母的实例

    下面小编就为大家带来一篇java获取中文拼音首字母的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java实现Html转Pdf的方法

    Java实现Html转Pdf的方法

    这篇文章主要介绍了Java实现Html转Pdf的方法,实例分析了java基于ITextRenderer类操作页面及系统自带字体生成pdf文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java常用类之字符串相关类使用详解

    Java常用类之字符串相关类使用详解

    String、StringBuilder、StringBuffer类是Java中常用的三个字符串相关类。本文将通过示例为大家讲解一下他们的用法,需要的可以参考一下
    2022-08-08
  • Spring使用@Autowired为抽象父类注入依赖代码实例

    Spring使用@Autowired为抽象父类注入依赖代码实例

    这篇文章主要介绍了Spring使用@Autowired为抽象父类注入依赖代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 利用Thumbnailator轻松实现图片缩放、旋转与加水印

    利用Thumbnailator轻松实现图片缩放、旋转与加水印

    java开发中经常遇到对图片的处理,JDK中也提供了对应的工具类,不过处理起来很麻烦,Thumbnailator是一个优秀的图片处理的开源Java类库,处理效果远比Java API的好,这篇文章主要介绍了利用Thumbnailator如何轻松的实现图片缩放、旋转与加水印,需要的朋友可以参考下
    2017-01-01
  • Java阻塞延迟队列DelayQueue原理及使用详解

    Java阻塞延迟队列DelayQueue原理及使用详解

    这篇文章主要介绍了Java阻塞延迟队列DelayQueue原理及使用详解,阻塞队列是一个支持两个附加操作的队列,这两个附加的操作是:在队列为空时,从队列中获取元素的消费者线程会一直等待直到队列变为非空,需要的朋友可以参考下
    2023-12-12

最新评论