From 48ba23fca0ab2abb992a0664ea33ca42dbc9140e Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 4 Oct 2023 22:36:37 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.0=E3=80=91=E3=80=90system=E3=80=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=AF=86=E7=A0=81=E7=AD=96=E7=95=A5=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E4=B8=A4=E4=B8=AA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SecurityStrategyController.java | 53 ++++++++++++++ .../modular/security/pojo/SecurityConfig.java | 73 +++++++++++++++++++ .../service/SecurityConfigService.java | 29 ++++++++ .../impl/SecurityConfigServiceImpl.java | 70 ++++++++++++++++++ 4 files changed, 225 insertions(+) create mode 100644 kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/controller/SecurityStrategyController.java create mode 100644 kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/pojo/SecurityConfig.java create mode 100644 kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/SecurityConfigService.java create mode 100644 kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/impl/SecurityConfigServiceImpl.java diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/controller/SecurityStrategyController.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/controller/SecurityStrategyController.java new file mode 100644 index 000000000..5def112e4 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/controller/SecurityStrategyController.java @@ -0,0 +1,53 @@ +package cn.stylefeng.roses.kernel.sys.modular.security.controller; + +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.sys.modular.security.pojo.SecurityConfig; +import cn.stylefeng.roses.kernel.sys.modular.security.service.SecurityConfigService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * 安全策略配置 + * + * @author fengshuonan + * @since 2023/10/4 15:59 + */ +@RestController +@ApiResource(name = "安全策略配置") +public class SecurityStrategyController { + + @Resource + private SecurityConfigService securityConfigService; + + /** + * 获取安全策略配置 + * + * @author fengshuonan + * @since 2023/10/4 16:00 + */ + @GetResource(name = "获取安全策略配置", path = "/security/getSecurityStrategy") + public ResponseData getSecurityStrategy() { + SecurityConfig securityConfig = this.securityConfigService.getSecurityConfig(); + return new SuccessResponseData<>(securityConfig); + } + + /** + * 更新安全策略配置 + * + * @author fengshuonan + * @since 2023/10/4 21:50 + */ + @PostResource(name = "更新安全策略配置", path = "/security/updateSecurityStrategy") + public ResponseData updateSecurityStrategy(@Validated @RequestBody SecurityConfig securityConfig) { + this.securityConfigService.updateSecurityConfig(securityConfig); + return new SuccessResponseData<>(); + } + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/pojo/SecurityConfig.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/pojo/SecurityConfig.java new file mode 100644 index 000000000..6d7e902e4 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/pojo/SecurityConfig.java @@ -0,0 +1,73 @@ +package cn.stylefeng.roses.kernel.sys.modular.security.pojo; + +import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 安全策略配置的DTO + * + * @author fengshuonan + * @since 2023/10/4 16:05 + */ +@Data +public class SecurityConfig { + + /** + * 最大密码重试次数 + */ + @ChineseDescription("最大密码重试次数") + @NotNull(message = "最大密码重试次数不能为空") + private Integer maxErrorLoginCount; + + /** + * 密码策略:最少多久更新一次密码,单位天 + */ + @ChineseDescription("密码策略:最少多久更新一次密码,单位天") + @NotNull(message = "密码策略:最少多久更新一次密码不能为空") + private Integer passwordMinUpdateDays; + + /** + * 密码历史不可重复次数 + */ + @ChineseDescription("密码历史不可重复次数") + @NotNull(message = "密码历史不可重复次数不能为空") + private Integer passwordMinCantRepeatTimes; + + /** + * 密码策略:口令最小长度 + */ + @ChineseDescription("密码策略:口令最小长度") + @NotNull(message = "密码策略:口令最小长度不能为空") + private Integer minPasswordLength; + + /** + * 密码策略:最少特殊符号数量 + */ + @ChineseDescription("密码策略:最少特殊符号数量") + @NotNull(message = "密码策略:最少特殊符号数量不能为空") + private Integer passwordMinSpecialSymbolCount; + + /** + * 密码策略:最少大写字母数量 + */ + @ChineseDescription("密码策略:最少大写字母数量") + @NotNull(message = "密码策略:最少大写字母数量不能为空") + private Integer getPasswordMinUpperCaseCount; + + /** + * 密码策略:最少小写字母数量 + */ + @ChineseDescription("密码策略:最少小写字母数量") + @NotNull(message = "密码策略:最少小写字母数量不能为空") + private Integer passwordMinLowerCaseCount; + + /** + * 密码策略:最少数字符号的数量 + */ + @ChineseDescription("密码策略:最少数字符号的数量") + @NotNull(message = "密码策略:最少数字符号的数量不能为空") + private Integer passwordMinNumberCount; + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/SecurityConfigService.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/SecurityConfigService.java new file mode 100644 index 000000000..fa0ce2dbe --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/SecurityConfigService.java @@ -0,0 +1,29 @@ +package cn.stylefeng.roses.kernel.sys.modular.security.service; + +import cn.stylefeng.roses.kernel.sys.modular.security.pojo.SecurityConfig; + +/** + * 系统安全配置的业务 + * + * @author fengshuonan + * @since 2023/10/4 16:22 + */ +public interface SecurityConfigService { + + /** + * 获取系统安全配置 + * + * @author fengshuonan + * @since 2023/10/4 16:23 + */ + SecurityConfig getSecurityConfig(); + + /** + * 更新系统安全配置 + * + * @author fengshuonan + * @since 2023/10/4 16:25 + */ + void updateSecurityConfig(SecurityConfig securityConfig); + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/impl/SecurityConfigServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/impl/SecurityConfigServiceImpl.java new file mode 100644 index 000000000..9f757823b --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/security/service/impl/SecurityConfigServiceImpl.java @@ -0,0 +1,70 @@ +package cn.stylefeng.roses.kernel.sys.modular.security.service.impl; + +import cn.stylefeng.roses.kernel.auth.api.expander.LoginConfigExpander; +import cn.stylefeng.roses.kernel.config.api.ConfigServiceApi; +import cn.stylefeng.roses.kernel.sys.modular.security.pojo.SecurityConfig; +import cn.stylefeng.roses.kernel.sys.modular.security.service.SecurityConfigService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +/** + * 系统配置的业务 + * + * @author fengshuonan + * @since 2023/10/4 16:24 + */ +@Service +public class SecurityConfigServiceImpl implements SecurityConfigService { + + @Resource + private ConfigServiceApi configServiceApi; + + @Override + public SecurityConfig getSecurityConfig() { + + SecurityConfig securityConfig = new SecurityConfig(); + securityConfig.setMaxErrorLoginCount(LoginConfigExpander.getMaxErrorLoginCount()); + securityConfig.setMinPasswordLength(LoginConfigExpander.getMinPasswordLength()); + + securityConfig.setPasswordMinSpecialSymbolCount(LoginConfigExpander.getPasswordMinSpecialSymbolCount()); + securityConfig.setGetPasswordMinUpperCaseCount(LoginConfigExpander.getPasswordMinUpperCaseCount()); + securityConfig.setPasswordMinLowerCaseCount(LoginConfigExpander.getPasswordMinLowerCaseCount()); + securityConfig.setPasswordMinNumberCount(LoginConfigExpander.getPasswordMinNumberCount()); + + securityConfig.setPasswordMinUpdateDays(LoginConfigExpander.getPasswordMinUpdateDays()); + securityConfig.setPasswordMinCantRepeatTimes(LoginConfigExpander.getPasswordMinCantRepeatTimes()); + + return securityConfig; + } + + @Override + public void updateSecurityConfig(SecurityConfig securityConfig) { + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_MAX_ERROR_LOGIN_COUNT, + String.valueOf(securityConfig.getMaxErrorLoginCount())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_MIN_PASSWORD_LENGTH, + String.valueOf(securityConfig.getMinPasswordLength())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_PASSWORD_MIN_SPECIAL_SYMBOL_COUNT, + String.valueOf(securityConfig.getPasswordMinSpecialSymbolCount())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_PASSWORD_MIN_UPPER_CASE_COUNT, + String.valueOf(securityConfig.getGetPasswordMinUpperCaseCount())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_PASSWORD_MIN_LOWER_CASE_COUNT, + String.valueOf(securityConfig.getPasswordMinLowerCaseCount())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_PASSWORD_MIN_NUMBER_COUNT, + String.valueOf(securityConfig.getPasswordMinNumberCount())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_PASSWORD_MIN_UPDATE_DAYS, + String.valueOf(securityConfig.getPasswordMinUpdateDays())); + + configServiceApi.updateConfigByCode(LoginConfigExpander.SYS_LOGIN_PASSWORD_MIN_CANT_REPEAT_TIMES, + String.valueOf(securityConfig.getPasswordMinCantRepeatTimes())); + } + +} +