使用java进行域名云解析

在最近的一个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>
  • 配置文件
/**
 * AliConfig
 *
 * @author cmm
 * @date 2020/11/6 14:24
 */
public class AliConfig {
 
    /**
     * DNS秘钥id
     */
    public static final String DNS_ACCESS_KEY_ID = "自己的accesskey";
    /**
     * DNS秘钥
     */
    public static final String DNS_SECRET = "自己的secret";

}

  • 域名查询
 /**
     * 域名信息查询
     * @param domain 要查询的域名
     * @return
     */
    public static boolean getDomainInfo(String domain){
//        DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, AliConfig.DNS_ACCESS_KEY_ID,AliConfig.DNS_SECRET);
        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) {
//        DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, AliConfig.DNS_ACCESS_KEY_ID,AliConfig.DNS_SECRET);
        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;
    }

  • 添加域名解析记录
/**
     * 添加域名解析记录
     * @param domain 需要解析的域名
     * @param value 需要解析的值(ip地址,cname,其他)
     * @param rr 解析记录
     * @return
     */
    public static Long addDomainRecord(String domain,String value,String rr) {
//        DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, AliConfig.DNS_ACCESS_KEY_ID,AliConfig.DNS_SECRET);
        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;
    }
  • 修改域名解析记录
 /**
     * 修改解析记录解析状态
     *
     * @param recordId 解析记录id
     * @param status 解析状态 启用 Enable 暂停 Disable
     * @return
     */
    public static boolean setDomainRecordStatus(String recordId,String status){
//        DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, AliConfig.DNS_ACCESS_KEY_ID,AliConfig.DNS_SECRET);
        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文档,描述非常详细!有问题也可以留言告诉我!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值