diff --git a/src/main/java/com/gxwebsoft/cms/controller/DomainController.java b/src/main/java/com/gxwebsoft/cms/controller/DomainController.java index 3b46328..8740cd8 100644 --- a/src/main/java/com/gxwebsoft/cms/controller/DomainController.java +++ b/src/main/java/com/gxwebsoft/cms/controller/DomainController.java @@ -1,10 +1,14 @@ package com.gxwebsoft.cms.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.gxwebsoft.cms.entity.Domain; import com.gxwebsoft.cms.param.DomainParam; import com.gxwebsoft.cms.service.DomainService; import com.gxwebsoft.common.core.utils.RedisUtil; -import com.gxwebsoft.common.core.web.*; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.User; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,6 +16,9 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; +import java.util.UUID; + +import static com.gxwebsoft.common.core.utils.DomainUtils.DNSLookup; /** * 网站域名记录表控制器 @@ -38,36 +45,45 @@ public class DomainController extends BaseController { @ApiOperation("查询全部网站域名记录表") @GetMapping() public ApiResult> list(DomainParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); - return success(domainService.list(page.getOrderWrapper())); // 使用关联查询 - //return success(domainService.listRel(param)); + return success(domainService.listRel(param)); } @ApiOperation("根据id查询网站域名记录表") @GetMapping("/{id}") public ApiResult get(@PathVariable("id") Integer id) { - return success(domainService.getById(id)); // 使用关联查询 - //return success(domainService.getByIdRel(id)); + return success(domainService.getByIdRel(id)); } @ApiOperation("添加网站域名记录表") @PostMapping() public ApiResult save(@RequestBody Domain domain) { - // 记录当前登录用户id - User loginUser = getLoginUser(); - if (loginUser != null) { - domain.setUserId(loginUser.getUserId()); - domain.setTenantId(loginUser.getTenantId()); - } - if (domainService.save(domain)) { - // 重写缓存 + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + domain.setUserId(loginUser.getUserId()); + domain.setTenantId(loginUser.getTenantId()); + domain.setHostValue(UUID.randomUUID() + ".wsdns.cn"); + } + // 检查缓存是否已存在 String key = "Domain:" + domain.getDomain(); - redisUtil.set(key,domain.getTenantId()); - return success("添加成功"); - } + final String string = redisUtil.get(key); + if(string != null){ + return fail("您绑定的域名已存在"); + } + // 是否有重复 + if(domainService.count(new LambdaQueryWrapper().eq(Domain::getDomain, domain.getDomain())) > 0){ + return fail("您绑定的域名已存在"); + } + // 是否超过最大绑定数量 + if(domainService.count() > 20){ + return fail("超过最大绑定限制"); + } + + if (domainService.save(domain)) { + return success("添加成功"); + } return fail("添加失败"); } @@ -120,4 +136,20 @@ public class DomainController extends BaseController { return fail("删除失败"); } + @ApiOperation("验证DNS解析信息是否填写正确") + @GetMapping("/resolvable/{id}") + public ApiResult resolvable(@PathVariable("id") Integer id){ + Domain domain = domainService.getByIdRel(id); + if(DNSLookup(domain)){ + // 改变状态 + domain.setStatus(1); + domainService.updateById(domain); + // 重写缓存 + String key = "Domain:" + domain.getDomain(); + redisUtil.set(key,domain.getTenantId()); + return success("验证通过"); + }; + return fail("未检测到解析值"); + } + } diff --git a/src/main/java/com/gxwebsoft/cms/entity/Domain.java b/src/main/java/com/gxwebsoft/cms/entity/Domain.java index 2fa3892..600094d 100644 --- a/src/main/java/com/gxwebsoft/cms/entity/Domain.java +++ b/src/main/java/com/gxwebsoft/cms/entity/Domain.java @@ -1,9 +1,6 @@ package com.gxwebsoft.cms.entity; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -32,6 +29,12 @@ public class Domain implements Serializable { @ApiModelProperty(value = "域名") private String domain; + @ApiModelProperty(value = "主机记录") + private String hostName; + + @ApiModelProperty(value = "记录值") + private String hostValue; + @ApiModelProperty(value = "状态") private Integer status; diff --git a/src/main/java/com/gxwebsoft/cms/service/impl/DomainServiceImpl.java b/src/main/java/com/gxwebsoft/cms/service/impl/DomainServiceImpl.java index 561800c..1c11d1a 100644 --- a/src/main/java/com/gxwebsoft/cms/service/impl/DomainServiceImpl.java +++ b/src/main/java/com/gxwebsoft/cms/service/impl/DomainServiceImpl.java @@ -23,7 +23,7 @@ public class DomainServiceImpl extends ServiceImpl impleme @Override public PageResult pageRel(DomainParam param) { PageParam page = new PageParam<>(param); - //page.setDefaultOrder("create_time desc"); + page.setDefaultOrder("status desc,create_time desc"); List list = baseMapper.selectPageRel(page, param); return new PageResult<>(list, page.getTotal()); } @@ -33,7 +33,7 @@ public class DomainServiceImpl extends ServiceImpl impleme List list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); - //page.setDefaultOrder("create_time desc"); + page.setDefaultOrder("status desc,create_time desc"); return page.sortRecords(list); } diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java index f3514c6..f9d893a 100644 --- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java +++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java @@ -39,22 +39,15 @@ public class MybatisPlusConfig { TenantLineHandler tenantLineHandler = new TenantLineHandler() { @Override public Expression getTenantId() { - // 从域名拿ID - final String domain = request.getHeader("Domain"); - if(StrUtil.isNotBlank(domain)){ - final String serverName = request.getServerName(); - System.out.println("serverName = " + serverName); - System.out.println("domain2 = " + domain); - final String domainName = redisUtil.get("Domain:".concat(domain)); - System.out.println("domainName = " + domainName); - return new LongValue(domainName); - } - - // 从设备请求头拿ID - String DeviceID = request.getHeader("Device-ID"); - if (StrUtil.isNotBlank(DeviceID)) { - return new LongValue(10048); + String Domain = request.getHeader("Domain"); + if (StrUtil.isNotBlank(Domain)) { + String key = "Domain:" + Domain; + String tenantId = redisUtil.get(key); + if(tenantId != null){ + System.out.println("从域名拿TID = " + tenantId); + return new LongValue(tenantId); + } } // 从请求头拿ID final String tenantId = request.getHeader("tenantId"); diff --git a/src/main/java/com/gxwebsoft/common/core/utils/DomainUtils.java b/src/main/java/com/gxwebsoft/common/core/utils/DomainUtils.java new file mode 100644 index 0000000..fd197b5 --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/core/utils/DomainUtils.java @@ -0,0 +1,34 @@ +package com.gxwebsoft.common.core.utils; + +import com.gxwebsoft.cms.entity.Domain; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +public class DomainUtils { + public static boolean isDomainResolvable(String domain) { + try { + InetAddress.getByName(domain); + return true; + } catch (UnknownHostException e) { + return false; + } + } + + public static boolean DNSLookup(Domain domain){ + try { + // 获取域名对应的InetAddress对象 + InetAddress inetAddress = InetAddress.getByName(domain.getDomain()); + final String hostAddress = inetAddress.getHostAddress(); + InetAddress inetAddress2 = InetAddress.getByName(domain.getHostValue()); + final String hostAddress2 = inetAddress2.getHostAddress(); + if(hostAddress.equals(hostAddress2)){ + return true; + } + return false; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} diff --git a/src/main/java/com/gxwebsoft/common/core/web/BaseController.java b/src/main/java/com/gxwebsoft/common/core/web/BaseController.java index 193805b..22dff4f 100644 --- a/src/main/java/com/gxwebsoft/common/core/web/BaseController.java +++ b/src/main/java/com/gxwebsoft/common/core/web/BaseController.java @@ -4,13 +4,10 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.gxwebsoft.common.core.Constants; import com.gxwebsoft.common.core.exception.BusinessException; -import com.gxwebsoft.common.core.utils.CacheClient; +import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.utils.SignCheckUtil; import com.gxwebsoft.common.system.entity.User; -import com.gxwebsoft.common.system.entity.UserInfo; -import com.gxwebsoft.common.system.service.UserService; import org.springframework.beans.propertyeditors.StringTrimmerEditor; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.WebDataBinder; @@ -30,10 +27,10 @@ import java.util.Map; * @since 2017-06-10 10:10:19 */ public class BaseController { - @Resource - private HttpServletRequest request; - @Resource - private StringRedisTemplate stringRedisTemplate; + @Resource + private HttpServletRequest request; + @Resource + private RedisUtil redisUtil; /** * 获取当前登录的user @@ -71,14 +68,25 @@ public class BaseController { * @return tenantId */ public Integer getTenantId() { - // 从登录用户拿tenantId + // 1 从登录用户拿tenantId User loginUser = getLoginUser(); if (loginUser != null) { return loginUser.getTenantId(); } - // 从请求头拿tenantId - if(StrUtil.isNotBlank(request.getHeader("tenantId"))){ - return Integer.valueOf(request.getHeader("tenantId")); + // 2 从域名拿ID + String Domain = request.getHeader("Domain"); + if (StrUtil.isNotBlank(Domain)) { + String key = "Domain:" + Domain; + String tenantId = redisUtil.get(key); + if(tenantId != null){ + System.out.println("从域名拿ID = " + tenantId); + return Integer.valueOf(tenantId); + } + } + // 3 从请求头拿ID + String tenantId = request.getHeader("tenantId"); + if(StrUtil.isNotBlank(tenantId)){ + return Integer.valueOf(tenantId); } return null; } @@ -266,7 +274,7 @@ public class BaseController { public String getAppSecret() { String key = "cache5:AppSecret:" + Integer.valueOf(getAppId()); System.out.println("key = " + key); - return stringRedisTemplate.opsForValue().get(key); + return redisUtil.get(key); } /**