From df46fd869f869ed0d6e56fbf48f966be2483308f Mon Sep 17 00:00:00 2001
From: sxu <602087911@qq.com>
Date: Mon, 27 Jan 2025 14:02:25 +0800
Subject: [PATCH] custauth
---
bonus-cust-auth/pom.xml | 136 ++++++
.../bonus/auth/BonusCustAuthApplication.java | 24 +
.../java/com/bonus/auth/config/LoginType.java | 43 ++
.../auth/config/PasswordPolicyConfig.java | 54 +++
.../auth/config/VerificationCodeType.java | 34 ++
.../auth/controller/ConfigController.java | 37 ++
.../auth/controller/TokenController.java | 222 +++++++++
.../auth/factory/LoginStrategyFactory.java | 43 ++
.../VerificationCodeStrategyFactory.java | 38 ++
.../java/com/bonus/auth/form/LoginBody.java | 50 ++
.../java/com/bonus/auth/form/LoginType.java | 5 +
.../com/bonus/auth/form/RegisterBody.java | 10 +
.../auth/service/EmailOtpLoginStrategy.java | 46 ++
.../service/EmailPasswordLoginStrategy.java | 57 +++
.../com/bonus/auth/service/LoginStrategy.java | 16 +
.../service/LoginVerificationCodeSender.java | 95 ++++
.../service/PasswordValidatorService.java | 446 ++++++++++++++++++
.../auth/service/PhoneOtpLoginStrategy.java | 49 ++
.../service/PhonePasswordLoginStrategy.java | 60 +++
.../RegisterVerificationCodeSender.java | 86 ++++
.../bonus/auth/service/SysLoginService.java | 298 ++++++++++++
.../auth/service/SysPasswordService.java | 123 +++++
.../auth/service/SysRecordLogService.java | 261 ++++++++++
.../UsernamePasswordLoginStrategy.java | 59 +++
.../service/VerificationCodeStrategy.java | 8 +
bonus-cust-auth/src/main/resources/banner.txt | 2 +
.../bootstrap-smart_canteen_local.yml | 27 ++
.../src/main/resources/bootstrap.yml | 14 +
.../src/main/resources/logback.xml | 74 +++
pom.xml | 1 +
30 files changed, 2418 insertions(+)
create mode 100644 bonus-cust-auth/pom.xml
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/BonusCustAuthApplication.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/config/LoginType.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/config/PasswordPolicyConfig.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/config/VerificationCodeType.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/controller/ConfigController.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/controller/TokenController.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/factory/LoginStrategyFactory.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/factory/VerificationCodeStrategyFactory.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/form/LoginBody.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/form/LoginType.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/form/RegisterBody.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/EmailOtpLoginStrategy.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/EmailPasswordLoginStrategy.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/LoginStrategy.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/LoginVerificationCodeSender.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/PasswordValidatorService.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/PhoneOtpLoginStrategy.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/PhonePasswordLoginStrategy.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/RegisterVerificationCodeSender.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/SysLoginService.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/SysPasswordService.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/SysRecordLogService.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/UsernamePasswordLoginStrategy.java
create mode 100644 bonus-cust-auth/src/main/java/com/bonus/auth/service/VerificationCodeStrategy.java
create mode 100644 bonus-cust-auth/src/main/resources/banner.txt
create mode 100644 bonus-cust-auth/src/main/resources/bootstrap-smart_canteen_local.yml
create mode 100644 bonus-cust-auth/src/main/resources/bootstrap.yml
create mode 100644 bonus-cust-auth/src/main/resources/logback.xml
diff --git a/bonus-cust-auth/pom.xml b/bonus-cust-auth/pom.xml
new file mode 100644
index 00000000..f0e887d1
--- /dev/null
+++ b/bonus-cust-auth/pom.xml
@@ -0,0 +1,136 @@
+
+
+ com.bonus
+ bonus
+ 24.12.0-SNAPSHOT
+
+ 4.0.0
+
+ bonus-cust-auth
+
+
+ bonus-cust-auth认证授权中心
+
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.bonus
+ bonus-common-security
+
+
+
+ com.github.ulisesbocchio
+ jasypt-spring-boot-starter
+ ${jasypt-spring-boot-starter.version}
+
+
+
+ com.bonus
+ bonus-common-log
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ ${swagger.fox.version}
+
+
+
+ com.bonus
+ bonus-common-swagger
+
+
+
+ com.hankcs
+ hanlp
+ portable-1.7.8
+
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+ com.bonus
+ bonus-common-config
+ 24.12.0-SNAPSHOT
+ compile
+
+
+ javax.servlet
+ servlet-api
+ 2.5
+ compile
+
+
+ com.alibaba
+ druid
+ 1.2.23
+ compile
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
+
+ bns-releases
+ http://192.168.0.56:8081/repository/maven-releases/
+
+
+ bns-snapshots
+ http://192.168.0.56:8081/repository/maven-snapshots/
+
+
+
+
diff --git a/bonus-cust-auth/src/main/java/com/bonus/auth/BonusCustAuthApplication.java b/bonus-cust-auth/src/main/java/com/bonus/auth/BonusCustAuthApplication.java
new file mode 100644
index 00000000..c4baabde
--- /dev/null
+++ b/bonus-cust-auth/src/main/java/com/bonus/auth/BonusCustAuthApplication.java
@@ -0,0 +1,24 @@
+package com.bonus.auth;
+
+import com.bonus.common.swagger.annotation.EnableCustomSwagger2;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import com.bonus.common.security.annotation.EnableRyFeignClients;
+
+/**
+ * 认证授权中心
+ *
+ * @author bonus
+ */
+@EnableCustomSwagger2
+@EnableRyFeignClients
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
+public class BonusCustAuthApplication
+{
+ public static void main(String[] args)
+ {
+ SpringApplication.run(BonusCustAuthApplication.class, args);
+ System.out.println("认证授权中心启动成功");
+ }
+}
diff --git a/bonus-cust-auth/src/main/java/com/bonus/auth/config/LoginType.java b/bonus-cust-auth/src/main/java/com/bonus/auth/config/LoginType.java
new file mode 100644
index 00000000..3fe870cd
--- /dev/null
+++ b/bonus-cust-auth/src/main/java/com/bonus/auth/config/LoginType.java
@@ -0,0 +1,43 @@
+package com.bonus.auth.config;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+public enum LoginType {
+ /**
+ * 账号密码
+ */
+ USERNAME_PASSWORD,
+ /**
+ * 手机号密码
+ */
+ PHONE_PASSWORD,
+ /**
+ * 邮箱密码
+ */
+ EMAIL_PASSWORD,
+ /**
+ * 手机号验证码
+ */
+ PHONE_OTP,
+ /**
+ * 邮箱验证码
+ */
+ EMAIL_OTP;
+
+ @JsonCreator
+ public static LoginType fromString(String key) {
+ if (key == null) {
+ return null;
+ }
+
+ // 自定义转换逻辑,允许大小写不敏感的匹配
+ for (LoginType type : LoginType.values()) {
+ if (type.name().equalsIgnoreCase(key)) {
+ return type;
+ }
+ }
+ // throw new ServiceException("不支持的登录方式");
+ return null;
+ }
+}
+
diff --git a/bonus-cust-auth/src/main/java/com/bonus/auth/config/PasswordPolicyConfig.java b/bonus-cust-auth/src/main/java/com/bonus/auth/config/PasswordPolicyConfig.java
new file mode 100644
index 00000000..078ee9f6
--- /dev/null
+++ b/bonus-cust-auth/src/main/java/com/bonus/auth/config/PasswordPolicyConfig.java
@@ -0,0 +1,54 @@
+package com.bonus.auth.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 该类用于从 `application.yml` 中加载密码策略的配置项。
+ * 使用 @ConfigurationProperties 注解,前缀为 password-policy。
+ * @author bonus
+ */
+@Component
+@ConfigurationProperties(prefix = "password-policy")
+@Data
+public class PasswordPolicyConfig {
+
+ // 密码的最小长度
+ private int minLength;
+
+ // 密码的最大长度
+ private int maxLength;
+
+ // 是否需要包含大写字母
+ private boolean requireUpperCase;
+
+ // 是否需要包含小写字母
+ private boolean requireLowerCase;
+
+ // 是否需要包含数字
+ private boolean requireDigit;
+
+ // 是否需要包含特殊字符
+ private boolean requireSpecialChar;
+
+ // 常见的弱密码列表,禁止使用这些密码
+ private List weakPasswords;
+
+ // 密码历史记录限制
+ private int passwordHistoryLimit;
+
+ // 是否限制连续相同字符
+ private boolean restrictConsecutiveChars;
+
+ // 最大允许的连续字符数
+ private int maxConsecutiveChars;
+
+ // 密码中是否不能包含用户名
+ private boolean excludeUsernameInPassword;
+
+ // 是否在首次登录时强制修改密码
+ private boolean forcePasswordChangeOnFirstLogin;
+}
diff --git a/bonus-cust-auth/src/main/java/com/bonus/auth/config/VerificationCodeType.java b/bonus-cust-auth/src/main/java/com/bonus/auth/config/VerificationCodeType.java
new file mode 100644
index 00000000..db7c6824
--- /dev/null
+++ b/bonus-cust-auth/src/main/java/com/bonus/auth/config/VerificationCodeType.java
@@ -0,0 +1,34 @@
+package com.bonus.auth.config;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+/**
+ * @author bonus
+ */
+
+public enum VerificationCodeType {
+ /**
+ * 登录
+ */
+ LOGIN,
+ /**
+ * 注册
+ */
+ REGISTER;
+
+ @JsonCreator
+ public static VerificationCodeType fromString(String key) {
+ if (key == null) {
+ return null;
+ }
+
+ // 自定义转换逻辑,允许大小写不敏感的匹配
+ for (VerificationCodeType type : VerificationCodeType.values()) {
+ if (type.name().equalsIgnoreCase(key)) {
+ return type;
+ }
+ }
+ // throw new ServiceException("不支持的登录方式");
+ return null;
+ }
+}
diff --git a/bonus-cust-auth/src/main/java/com/bonus/auth/controller/ConfigController.java b/bonus-cust-auth/src/main/java/com/bonus/auth/controller/ConfigController.java
new file mode 100644
index 00000000..fe768e73
--- /dev/null
+++ b/bonus-cust-auth/src/main/java/com/bonus/auth/controller/ConfigController.java
@@ -0,0 +1,37 @@
+package com.bonus.auth.controller;
+
+import com.bonus.common.core.domain.R;
+import com.bonus.config.SystemConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author bonus 系统配置层
+ */
+@RestController
+@Slf4j
+@RefreshScope
+public class ConfigController {
+ @Resource
+ private SystemConfig systemConfig;
+
+ @GetMapping("getConfig")
+ public R