1、阿里云DNS的SDK依赖
| tea-openapi | |
| alidns20150109 | |
2、第一个方法:创建SDK客户端实例
所有解析记录的操作都要通过这个客户端实例来进行,所以要首先创建这个实例,需要阿里云的AccessKey(AppId和AppSecret)
| 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的方法。
| 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 | |
| for(DescribeDomainRecordsResponseBodyDomainRecordsRecord rec: recs){ | |
| if(rec.getRR().equalsIgnoreCase(RR)){ | |
| recId = rec.getRecordId(); | |
| break; | |
| } | |
| } | |
| } | |
| } catch (Exception e) { | |
| } | |
| return recId; | |
| } |
4、第三个方法:添加或修改指定的记录
方便起见,这里我将添加和修改集成到了一个方法,相当于SaveOrUpdate。
| 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直接删除即可。
| 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())); | |
| } | |
| } |



