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、完整代码
查看代码
转载地址https://www.cnblogs.com/netWild/p/15815757.html