From 0b508db2faa395fdba9896b0c92773d46b01ba95 Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Tue, 9 Sep 2025 17:09:12 +0800
Subject: [PATCH 1/7] md
---
afd.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 afd.md
diff --git a/afd.md b/afd.md
new file mode 100644
index 0000000..4bc45af
--- /dev/null
+++ b/afd.md
@@ -0,0 +1 @@
+fsdafsdfsdf
\ No newline at end of file
--
Gitee
From 005127770645d02983698d7d64796c6537b8645b Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Fri, 12 Sep 2025 13:58:36 +0800
Subject: [PATCH 2/7] =?UTF-8?q?chore(qa-service=20applicationy.aml):=20?=
=?UTF-8?q?=E6=95=B4=E5=90=88=E7=BB=9F=E4=B8=80=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
将nacos中的ip端口统一用某一字段管理并添加了jwt令牌的密钥和时间错
---
.../src/main/resources/application.properties | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/user-service/user-service-bootstrap/src/main/resources/application.properties b/user-service/user-service-bootstrap/src/main/resources/application.properties
index e21f2d5..9b6b30e 100644
--- a/user-service/user-service-bootstrap/src/main/resources/application.properties
+++ b/user-service/user-service-bootstrap/src/main/resources/application.properties
@@ -1,13 +1,18 @@
server.port=28080
spring.application.name=user-service
+jwt.secret-key=5a2d9f8e4c1b3a0d7e5f6c2a9b8d4e1f5a2d9f8e4c1b3a0d7e5f6c2a9b8d4e1f
+jwt.expiration-time=300000
+nacos.server.addr=192.168.168.128
+nacos.server.addr.port=8848
+
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
-spring.cloud.nacos.discovery.server-addr=192.168.168.128:8848
+spring.cloud.nacos.discovery.server-addr=${nacos.server.addr}:${nacos.server.addr.port}
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
@@ -17,7 +22,7 @@ spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=nacos
spring.cloud.nacos.config.contextPath=/nacos
# 设置配置中心服务端地址
-spring.cloud.nacos.config.server-addr=192.168.168.128:8848
+spring.cloud.nacos.config.server-addr=${nacos.server.addr}:${nacos.server.addr.port}
# Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,请不要填写这个值,直接留空即可
# spring.cloud.nacos.config.namespace=
spring.config.import=nacos:${spring.application.name}.properties?refresh=true
--
Gitee
From 010bf75e05bd998f6c72092e84c8556afab6eb0c Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Fri, 12 Sep 2025 14:00:06 +0800
Subject: [PATCH 3/7] =?UTF-8?q?feat(qa-service-in=20CreateUserRequestDto):?=
=?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=86=E7=A0=81=E6=A0=A1?=
=?UTF-8?q?=E9=AA=8C=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加了密码校验规则
---
.../in/web/dto/CreateUserRequestDTO.java | 31 +++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/CreateUserRequestDTO.java b/user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/CreateUserRequestDTO.java
index 9ebf615..f63eb38 100644
--- a/user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/CreateUserRequestDTO.java
+++ b/user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/CreateUserRequestDTO.java
@@ -7,4 +7,35 @@ public record CreateUserRequestDTO(
String password,
String rePassword) {
// TODO: 密码校验
+ public CreateUserRequestDTO{
+ /*chengguoqing添加了校验规则1
+ */
+ if (password == null || password.length() < 6|| password.length() >22) {
+ throw new RuntimeException("密码长度6-22");
+ }
+// xuyihua添加了校验规则2
+ // 至少包含一个数字
+ if (!password.matches(".*\\d.*")) {
+ throw new RuntimeException("密码必须包含至少一个数字");
+ }
+// linyanjing添加了校验规则2
+ // 至少包含一个字母
+ if (!password.matches(".*[a-zA-Z].*")) {
+ throw new RuntimeException("密码必须包含至少一个字母");
+ }
+// zhouxudong添加了校验规则2
+ // 不能包含空格
+ if (password.contains(" ")) {
+ throw new RuntimeException("密码不能包含空格");
+ }
+// zhengbinjie和chengguoqing添加了校验规则2
+ // 不能是太简单的密码
+ String[] weakPasswords = {"123456", "password", "qwerty", "abc123", "admin"};
+ for (String weak : weakPasswords) {
+ if (password.toLowerCase().contains(weak)) {
+ throw new RuntimeException("密码过于简单,请选择更复杂的密码");
+ }
+ }
+ }
+
}
--
Gitee
From 24c5e54241c05e43acf6cf4f69da87cf6db5d213 Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Fri, 12 Sep 2025 14:01:14 +0800
Subject: [PATCH 4/7] =?UTF-8?q?feat(qa-service-in=20CreateUserRequestDto):?=
=?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=86=E7=A0=81=E6=A0=A1?=
=?UTF-8?q?=E9=AA=8C=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加了密码校验规则
---
user-service/user-service-common/pom.xml | 15 +++
.../user/service/common/utils/JwtUtils.java | 94 +++++++++++++++++++
2 files changed, 109 insertions(+)
create mode 100644 user-service/user-service-common/src/main/java/com/example/user/service/common/utils/JwtUtils.java
diff --git a/user-service/user-service-common/pom.xml b/user-service/user-service-common/pom.xml
index a198ef3..543cb12 100644
--- a/user-service/user-service-common/pom.xml
+++ b/user-service/user-service-common/pom.xml
@@ -24,6 +24,21 @@
spring-boot-starter-test
test
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.5
+
diff --git a/user-service/user-service-common/src/main/java/com/example/user/service/common/utils/JwtUtils.java b/user-service/user-service-common/src/main/java/com/example/user/service/common/utils/JwtUtils.java
new file mode 100644
index 0000000..c210a4d
--- /dev/null
+++ b/user-service/user-service-common/src/main/java/com/example/user/service/common/utils/JwtUtils.java
@@ -0,0 +1,94 @@
+package com.example.user.service.common.utils;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.security.Keys;
+import org.springframework.beans.factory.annotation.Value;
+
+import javax.crypto.SecretKey;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.Map;
+
+public class JwtUtils {
+
+
+ @Value("${jwt.secret-key}")
+ private String SECRET_KEY;
+ @Value("${jwt.expiration-time}")
+ private long EXPIRATION_TIME;
+
+ /**
+ * zhengbinjie 添加了 generateToken
+ * @param username 用户名(建议使用真名,方便我们"记住"你)
+ * @return JWT令牌(小心保管,丢了不赔)
+ */
+ public String generateToken(String username,Map claims) {
+ Date expirationDate = Date.from(
+ LocalDateTime.now()
+ .plusYears(100)
+ .atZone(ZoneId.systemDefault())
+ .toInstant()
+ );
+ SecretKey keys = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
+ return Jwts.builder()
+ .setClaims(claims)
+ .setSubject(username)
+ .setIssuedAt(new Date())
+ .setExpiration(expirationDate)
+ .signWith(keys, SignatureAlgorithm.HS256)
+ .compact();
+ }
+
+ /**
+ * chengguoqing 添加了parseToken
+ * 验证JWT令牌(过程非常严格,请自重)
+ * @param token JWT令牌
+ * @return 验证结果(true表示我们勉强认可你)
+ */
+ public Claims parseToken(String token) {
+ SecretKey keys = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
+ return Jwts.parserBuilder()
+ .setSigningKey(keys)
+ .build()
+ .parseClaimsJws(token)
+ .getBody();
+ }
+
+ /**xuyihua 添加了 extractUsername
+ * 从令牌中提取用户名(需要心灵感应能力)
+ * @param token JWT令牌
+ * @return 用户名(如果猜对了请告诉我)
+ */
+ public String extractUsername(String token) {
+ SecretKey keys = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
+ return Jwts.parserBuilder()
+ .setSigningKey( keys)
+ .build()
+ .parseClaimsJws(token)
+ .getBody()
+ .getSubject();
+
+ }
+
+ /** huangzhihang 添加了 isTokenExpired
+ * 检查令牌是否过期(时间感知能力MAX)
+ * @param token JWT令牌
+ * @return 是否过期(过期了就老实重新登录)
+ */
+ public boolean isTokenExpired(String token) {
+ SecretKey keys = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
+ Date expiration = Jwts.parserBuilder()
+ .setSigningKey( keys)
+ .build()
+ .parseClaimsJws(token)
+ .getBody()
+ .getExpiration();
+ return expiration.before(new Date());
+
+ }
+
+}
+
--
Gitee
From 0667bc3092f44eeb68a52d7921333497c6f1ae44 Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Fri, 12 Sep 2025 14:06:35 +0800
Subject: [PATCH 5/7] =?UTF-8?q?feat(qa-service-allication):=20=E5=AE=8C?=
=?UTF-8?q?=E5=96=84=E9=A1=B9=E7=9B=AEtoken=E8=8E=B7=E5=8F=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
再suerLoginService中注入调用了Jwt
---
.../service/application/config/JwtConfig.java | 13 +++++++++++++
.../application/service/UserLoginService.java | 19 +++++++++++++------
2 files changed, 26 insertions(+), 6 deletions(-)
create mode 100644 user-service/user-service-application/src/main/java/com/example/user/service/application/config/JwtConfig.java
diff --git a/user-service/user-service-application/src/main/java/com/example/user/service/application/config/JwtConfig.java b/user-service/user-service-application/src/main/java/com/example/user/service/application/config/JwtConfig.java
new file mode 100644
index 0000000..009caeb
--- /dev/null
+++ b/user-service/user-service-application/src/main/java/com/example/user/service/application/config/JwtConfig.java
@@ -0,0 +1,13 @@
+package com.example.user.service.application.config;
+
+import com.example.user.service.common.utils.JwtUtils;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+//zhengbinjie 添加了注册
+@Configuration
+public class JwtConfig {
+ @Bean
+ public JwtUtils jwtUtils() {
+ return new JwtUtils();
+ }
+}
diff --git a/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java b/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java
index 4240269..17d343a 100644
--- a/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java
+++ b/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java
@@ -2,19 +2,23 @@ package com.example.user.service.application.service;
import com.example.user.service.application.command.UserLoginCommand;
import com.example.user.service.application.port.in.UserLoginUseCase;
+import com.example.user.service.common.utils.JwtUtils;
import com.example.user.service.domain.User;
import com.example.user.service.domain.port.GetUserByNamePort;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.util.Map;
+
@Slf4j
@Service
public class UserLoginService implements UserLoginUseCase {
@Resource
private GetUserByNamePort getUserByNamePort;
-
+ @Resource
+ private JwtUtils jwtUtils;
@Override
public String login(UserLoginCommand userLoginCommand) {
//验证用户
@@ -23,15 +27,18 @@ public class UserLoginService implements UserLoginUseCase {
if(user==null){
throw new RuntimeException("用户不存在");
}
- //验证密码
- if(!user.validatePassword(userLoginCommand.password())){
- throw new RuntimeException("密码错误");
- }
+// //验证密码
+// if(!user.validatePassword(userLoginCommand.password())){
+// throw new RuntimeException("密码错误");
+// }
//签发token
/*
+ * zhouxudong linyanjing添加了调用接口
todo 封装一个JwtUtil实现jwt签发
token 有效期 5min ,key=123456 ,载荷:{name:user.name,id:user.id,is_super}
*/
- return "token";
+
+ Map claims = Map.of("name", user.getName().getValue(), "id", user.getId().getValue());
+ return jwtUtils.generateToken(user.getName().getValue(), claims);
}
}
--
Gitee
From 67736d191079a829489120f956b31398b99c3bad Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Fri, 12 Sep 2025 14:08:37 +0800
Subject: [PATCH 6/7] =?UTF-8?q?build(qa-service-bootstrap=20=20pom):=20?=
=?UTF-8?q?=E4=BE=9D=E8=B5=96=E6=B3=A8=E5=85=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
由于无法从common中获取jwt 依赖(可能存在依赖冲突问题)并注入bootstrap的ajr中 再bootstrap中重新添加jwt依赖
---
user-service/user-service-bootstrap/pom.xml | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/user-service/user-service-bootstrap/pom.xml b/user-service/user-service-bootstrap/pom.xml
index b9c3d17..0afde31 100644
--- a/user-service/user-service-bootstrap/pom.xml
+++ b/user-service/user-service-bootstrap/pom.xml
@@ -47,6 +47,21 @@
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.5
+
--
Gitee
From 7574658580d857cc59b8691bd6d4566abb554725 Mon Sep 17 00:00:00 2001
From: kkk <15475386+kstt@user.noreply.gitee.com>
Date: Fri, 12 Sep 2025 14:15:45 +0800
Subject: [PATCH 7/7] =?UTF-8?q?fix(qa-service-application=20UserLoginServi?=
=?UTF-8?q?ce):=20=E6=81=A2=E5=A4=8D=E6=B3=A8=E9=87=8A=E6=8E=89=E7=9A=84?=
=?UTF-8?q?=E5=AF=86=E7=A0=81=E7=99=BB=E5=85=A5=E6=A0=A1=E9=AA=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
恢复注释掉的密码登入校验
---
.../service/application/service/UserLoginService.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java b/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java
index 17d343a..adcf7a4 100644
--- a/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java
+++ b/user-service/user-service-application/src/main/java/com/example/user/service/application/service/UserLoginService.java
@@ -27,10 +27,10 @@ public class UserLoginService implements UserLoginUseCase {
if(user==null){
throw new RuntimeException("用户不存在");
}
-// //验证密码
-// if(!user.validatePassword(userLoginCommand.password())){
-// throw new RuntimeException("密码错误");
-// }
+ //验证密码
+ if(!user.validatePassword(userLoginCommand.password())){
+ throw new RuntimeException("密码错误");
+ }
//签发token
/*
* zhouxudong linyanjing添加了调用接口
--
Gitee