optimizer: 域名管理支持多级域名 & fix:修改子域名,输入相同子域名引起的报错。优化前端交互内容显示。
This commit is contained in:
+1
@@ -90,6 +90,7 @@ public class PortMappingUpdateReq {
|
||||
|
||||
@Data
|
||||
public class DomainMapping {
|
||||
private Integer id;
|
||||
private Integer domainId;
|
||||
private String subdomain;
|
||||
}
|
||||
|
||||
+24
-3
@@ -16,11 +16,32 @@ import java.util.Set;
|
||||
@Mapper
|
||||
public interface DomainMapper extends BaseMapper<DomainNameDO> {
|
||||
default DomainNameDO checkRepeat(String domain, Set<Integer> excludeIds) {
|
||||
return this.selectOne(new LambdaQueryWrapper<DomainNameDO>()
|
||||
.eq(DomainNameDO::getDomain, domain)
|
||||
// 查询与输入域名相关的域名列表
|
||||
List<DomainNameDO> domainList = this.selectList(new LambdaQueryWrapper<DomainNameDO>()
|
||||
.notIn(excludeIds != null, DomainNameDO::getId, excludeIds)
|
||||
.last("limit 1")
|
||||
);
|
||||
|
||||
// 遍历数据库中的域名,检查是否存在重复(包括子域名)
|
||||
for (DomainNameDO domainNameDO : domainList) {
|
||||
String existingDomain = domainNameDO.getDomain();
|
||||
// 完全相等的情况
|
||||
if (existingDomain.equals(domain)) {
|
||||
return domainNameDO;
|
||||
}
|
||||
// 是子域名关系
|
||||
if (isSubdomainOrEqual(existingDomain, domain)) {
|
||||
return domainNameDO;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果没有找到重复的,返回 null
|
||||
return null;
|
||||
}
|
||||
|
||||
// 辅助方法:判断 domain1 是否是 domain2 的子域名,或者两者相等
|
||||
private boolean isSubdomainOrEqual(String domain1, String domain2) {
|
||||
// 判断是否是子域名关系,例如 "proxy.asgc.fun" 是 "asgc.fun" 的子域名
|
||||
return domain1.endsWith("." + domain2) || domain2.endsWith("." + domain1);
|
||||
}
|
||||
|
||||
default void updateEnableStatus(Integer id, Integer enable, Date updateTime) {
|
||||
|
||||
+2
-9
@@ -1,20 +1,13 @@
|
||||
package org.dromara.neutrinoproxy.server.dal;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.neutrinoproxy.server.dal.entity.DomainNameDO;
|
||||
import org.dromara.neutrinoproxy.server.dal.entity.DomainPortMappingDO;
|
||||
import org.dromara.neutrinoproxy.server.dal.entity.PortMappingDO;
|
||||
import org.dromara.neutrinoproxy.server.service.bo.FullDomainNameBO;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author: Mirac
|
||||
@@ -22,11 +15,11 @@ import java.util.Set;
|
||||
*/
|
||||
@Mapper
|
||||
public interface DomainPortMappingMapper extends BaseMapper<DomainPortMappingDO> {
|
||||
default Boolean checkRepeatBySubdomain(String subdomain, Integer domainNameId, Integer portMappingId) {
|
||||
default Boolean checkRepeatBySubdomain(String subdomain, Integer domainNameId, Integer id) {
|
||||
return StringUtils.isEmpty(subdomain)? Boolean.FALSE : this.selectCount(new LambdaQueryWrapper<DomainPortMappingDO>()
|
||||
.eq(DomainPortMappingDO::getSubdomain, subdomain)
|
||||
.eq(DomainPortMappingDO::getDomainNameId, domainNameId)
|
||||
.ne(portMappingId != null, DomainPortMappingDO::getPortMappingId, portMappingId)
|
||||
.ne(id != null, DomainPortMappingDO::getId, id)
|
||||
.last("limit 1")
|
||||
).intValue() > 0;
|
||||
}
|
||||
|
||||
+2
-1
@@ -245,7 +245,8 @@ public class PortMappingService implements LifecycleBean {
|
||||
DomainNameDO domainNameDO = domainNameDOMap.get(item.getDomainId());
|
||||
ParamCheckUtil.checkNotNull(domainNameDO, ExceptionConstant.DOMAIN_NAME_NOT_EXIST);
|
||||
//检查子域名是否重复
|
||||
ParamCheckUtil.checkExpression(!domainPortMappingMapper.checkRepeatBySubdomain(item.getSubdomain(), item.getDomainId(), req.getId()),
|
||||
boolean b = !domainPortMappingMapper.checkRepeatBySubdomain(item.getSubdomain(), item.getDomainId(), item.getId());
|
||||
ParamCheckUtil.checkExpression(b,
|
||||
ExceptionConstant.SUDOMAIN_NAME_CANNOT_REPEAT);
|
||||
});
|
||||
}
|
||||
|
||||
+4
@@ -12,6 +12,10 @@ import org.dromara.neutrinoproxy.server.constant.HttpsStatusEnum;
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class FullDomainNameBO {
|
||||
/**
|
||||
* 域名端口映射id
|
||||
*/
|
||||
private Integer id;
|
||||
/**
|
||||
* 端口映射id
|
||||
*/
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<mapper namespace="org.dromara.neutrinoproxy.server.dal.DomainMapper">
|
||||
|
||||
<select id="selectFullDomainNameListByPortMappingIds" resultType="org.dromara.neutrinoproxy.server.service.bo.FullDomainNameBO">
|
||||
SELECT pm.id AS portMappingId, dpm.subdomain as subdomain, dn.domain AS domain, dn.id as domainNameId, dn.force_https as forceHttps
|
||||
SELECT dpm.id as id, pm.id AS portMappingId, dpm.subdomain as subdomain, dn.domain AS domain, dn.id as domainNameId, dn.force_https as forceHttps
|
||||
FROM domain_port_mapping dpm
|
||||
LEFT JOIN port_mapping pm ON pm.id = dpm.port_mapping_id
|
||||
LEFT JOIN domain_name dn ON dn.id = dpm.domain_name_id
|
||||
@@ -14,14 +14,14 @@
|
||||
</select>
|
||||
<select id="selectFullDomainNameList"
|
||||
resultType="org.dromara.neutrinoproxy.server.service.bo.FullDomainNameBO">
|
||||
SELECT pm.id AS portMappingId, dpm.subdomain as subdomain, dn.domain AS domain, dn.id as domainNameId, dn.force_https as forceHttps
|
||||
SELECT dpm.id as id, pm.id AS portMappingId, dpm.subdomain as subdomain, dn.domain AS domain, dn.id as domainNameId, dn.force_https as forceHttps
|
||||
FROM domain_port_mapping dpm
|
||||
LEFT JOIN port_mapping pm ON pm.id = dpm.port_mapping_id
|
||||
LEFT JOIN domain_name dn ON dn.id = dpm.domain_name_id
|
||||
</select>
|
||||
<select id="selectFullDomainNameListByDomainNameIds"
|
||||
resultType="org.dromara.neutrinoproxy.server.service.bo.FullDomainNameBO">
|
||||
SELECT pm.id AS portMappingId, dpm.subdomain as subdomain, dn.domain AS domain, dn.id as domainNameId, dn.force_https as forceHttps
|
||||
SELECT dpm.id as id, pm.id AS portMappingId, dpm.subdomain as subdomain, dn.domain AS domain, dn.id as domainNameId, dn.force_https as forceHttps
|
||||
FROM domain_port_mapping dpm
|
||||
LEFT JOIN port_mapping pm ON pm.id = dpm.port_mapping_id
|
||||
LEFT JOIN domain_name dn ON dn.id = dpm.domain_name_id
|
||||
|
||||
Reference in New Issue
Block a user