mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-10-29 02:57:11 +08:00
perf: 系统参数新增根据类别查询方法
This commit is contained in:
@@ -166,9 +166,9 @@ public enum PasswordPolicyEnum {
|
||||
private final String msg;
|
||||
|
||||
/**
|
||||
* 策略前缀
|
||||
* 策略类别
|
||||
*/
|
||||
public static final String PREFIX = "PASSWORD_";
|
||||
public static final String CATEGORY = "PASSWORD";
|
||||
|
||||
/**
|
||||
* 校验取值范围
|
||||
|
||||
@@ -16,9 +16,13 @@
|
||||
|
||||
package top.continew.admin.system.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
import top.continew.admin.system.model.entity.OptionDO;
|
||||
import top.continew.starter.data.mybatis.plus.base.BaseMapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 参数 Mapper
|
||||
*
|
||||
@@ -26,4 +30,13 @@ import top.continew.starter.data.mybatis.plus.base.BaseMapper;
|
||||
* @since 2023/8/26 19:38
|
||||
*/
|
||||
public interface OptionMapper extends BaseMapper<OptionDO> {
|
||||
|
||||
/**
|
||||
* 根据类别查询
|
||||
*
|
||||
* @param category 类别
|
||||
* @return 列表
|
||||
*/
|
||||
@Select("SELECT code, value, default_value FROM sys_option WHERE category = #{category}")
|
||||
List<OptionDO> selectByCategory(@Param("category") String category);
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import top.continew.admin.system.model.req.OptionResetValueReq;
|
||||
import top.continew.admin.system.model.resp.OptionResp;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
@@ -40,6 +41,14 @@ public interface OptionService {
|
||||
*/
|
||||
List<OptionResp> list(OptionQuery query);
|
||||
|
||||
/**
|
||||
* 根据类别查询
|
||||
*
|
||||
* @param category 类别
|
||||
* @return 参数信息
|
||||
*/
|
||||
Map<String, String> getByCategory(String category);
|
||||
|
||||
/**
|
||||
* 修改参数
|
||||
*
|
||||
|
||||
@@ -19,7 +19,9 @@ package top.continew.admin.system.service.impl;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alicp.jetcache.anno.Cached;
|
||||
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -56,14 +58,25 @@ public class OptionServiceImpl implements OptionService {
|
||||
private final OptionMapper baseMapper;
|
||||
|
||||
@Override
|
||||
@Cached(key = "#query.category", name = CacheConstants.OPTION_KEY_PREFIX)
|
||||
public List<OptionResp> list(OptionQuery query) {
|
||||
return BeanUtil.copyToList(baseMapper.selectList(QueryWrapperHelper.build(query)), OptionResp.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cached(key = "#category", name = CacheConstants.OPTION_KEY_PREFIX + "MAP:")
|
||||
public Map<String, String> getByCategory(String category) {
|
||||
return baseMapper.selectByCategory(category)
|
||||
.stream()
|
||||
.collect(Collectors.toMap(OptionDO::getCode, o -> StrUtil.emptyIfNull(ObjectUtil.defaultIfNull(o
|
||||
.getValue(), o.getDefaultValue())), (oldVal, newVal) -> oldVal));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(List<OptionReq> options) {
|
||||
Map<String, String> passwordPolicyOptionMap = options.stream()
|
||||
.filter(option -> StrUtil.startWith(option.getCode(), PasswordPolicyEnum.PREFIX))
|
||||
.filter(option -> StrUtil.startWith(option
|
||||
.getCode(), PasswordPolicyEnum.CATEGORY + StringConstants.UNDERLINE))
|
||||
.collect(Collectors.toMap(OptionReq::getCode, OptionReq::getValue, (oldVal, newVal) -> oldVal));
|
||||
// 校验密码策略参数取值范围
|
||||
for (Map.Entry<String, String> passwordPolicyOptionEntry : passwordPolicyOptionMap.entrySet()) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.img.ImgUtil;
|
||||
import cn.hutool.core.io.file.FileNameUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alicp.jetcache.anno.CacheInvalidate;
|
||||
@@ -333,16 +334,17 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
|
||||
* @param user 用户信息
|
||||
*/
|
||||
private int checkPassword(String password, UserDO user) {
|
||||
Map<String, String> passwordPolicy = optionService.getByCategory(CATEGORY);
|
||||
// 密码最小长度
|
||||
PASSWORD_MIN_LENGTH.validate(password, optionService.getValueByCode2Int(PASSWORD_MIN_LENGTH.name()), user);
|
||||
PASSWORD_MIN_LENGTH.validate(password, MapUtil.getInt(passwordPolicy, PASSWORD_MIN_LENGTH.name()), user);
|
||||
// 密码是否必须包含特殊字符
|
||||
PASSWORD_CONTAIN_SPECIAL_CHARACTERS.validate(password, optionService
|
||||
.getValueByCode2Int(PASSWORD_CONTAIN_SPECIAL_CHARACTERS.name()), user);
|
||||
PASSWORD_CONTAIN_SPECIAL_CHARACTERS.validate(password, MapUtil
|
||||
.getInt(passwordPolicy, PASSWORD_CONTAIN_SPECIAL_CHARACTERS.name()), user);
|
||||
// 密码是否允许包含正反序账号名
|
||||
PASSWORD_ALLOW_CONTAIN_USERNAME.validate(password, optionService
|
||||
.getValueByCode2Int(PASSWORD_ALLOW_CONTAIN_USERNAME.name()), user);
|
||||
PASSWORD_ALLOW_CONTAIN_USERNAME.validate(password, MapUtil
|
||||
.getInt(passwordPolicy, PASSWORD_ALLOW_CONTAIN_USERNAME.name()), user);
|
||||
// 密码重复使用规则
|
||||
int passwordReusePolicy = optionService.getValueByCode2Int(PASSWORD_REUSE_POLICY.name());
|
||||
int passwordReusePolicy = MapUtil.getInt(passwordPolicy, PASSWORD_REUSE_POLICY.name());
|
||||
PASSWORD_REUSE_POLICY.validate(password, passwordReusePolicy, user);
|
||||
return passwordReusePolicy;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user