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 01/17] 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 02/17] =?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 03/17] =?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 04/17] =?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 05/17] =?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 06/17] =?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 07/17] =?UTF-8?q?fix(qa-service-application=20UserLoginSer?= =?UTF-8?q?vice):=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 From 7057575dec5858e8b49696076e79a55d242d2cbf Mon Sep 17 00:00:00 2001 From: kkk <15475386+kstt@user.noreply.gitee.com> Date: Mon, 15 Sep 2025 22:19:32 +0800 Subject: [PATCH 08/17] =?UTF-8?q?feat(qa-service-adater-in):=20=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E6=B7=BB=E5=8A=A0=E4=BA=86UserController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加了登入功能的登入,注册校验,登出等功能,使用controlelr,setvice,mapper4层架构, --- .idea/misc.xml | 11 +- user-service/pom.xml | 8 + .../user-adapter-in-web/pom.xml | 25 +- .../in/web/config/BasicSecurityConfig.java | 176 +++++++ .../adapter/in/web/config/PasswordConfig.java | 32 ++ .../in/web/controller/UserController1.java | 447 ++++++++++++++++++ .../com/example/user/adapter/in/web/data.sql | 23 + .../user/adapter/in/web/dto/LoginRequest.java | 46 ++ .../adapter/in/web/dto/LoginResponse.java | 59 +++ .../adapter/in/web/dto/RegisterRequest.java | 99 ++++ .../user/adapter/in/web/dto/Result.java | 149 ++++++ .../user/adapter/in/web/dto/UserInfo.java | 102 ++++ .../user/adapter/in/web/entity/User.java | 127 +++++ .../web/exception/GlobalExceptionHandler.java | 260 ++++++++++ .../web/filter/JwtAuthenticationFilter.java | 352 ++++++++++++++ .../adapter/in/web/mapper/UserMapper.java | 52 ++ .../web/service/CustomUserDetailsService.java | 366 ++++++++++++++ .../in/web/service/TokenBlacklistService.java | 204 ++++++++ .../service/application/config/JwtConfig.java | 6 +- .../application/service/UserLoginService.java | 9 +- .../src/main/resources/application.properties | 4 +- user-service/user-service-common/pom.xml | 6 + .../user/service/common/utils/JwtUtil.java | 345 ++++++++++++++ .../user/service/common/utils/JwtUtils.java | 94 ---- 24 files changed, 2890 insertions(+), 112 deletions(-) create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/config/BasicSecurityConfig.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/config/PasswordConfig.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/controller/UserController1.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/data.sql create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/LoginRequest.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/LoginResponse.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/RegisterRequest.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/Result.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/dto/UserInfo.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/entity/User.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/exception/GlobalExceptionHandler.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/filter/JwtAuthenticationFilter.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/mapper/UserMapper.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/service/CustomUserDetailsService.java create mode 100644 user-service/user-service-adapter/user-adapter-in/user-adapter-in-web/src/main/java/com/example/user/adapter/in/web/service/TokenBlacklistService.java create mode 100644 user-service/user-service-common/src/main/java/com/example/user/service/common/utils/JwtUtil.java delete mode 100644 user-service/user-service-common/src/main/java/com/example/user/service/common/utils/JwtUtils.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 40fbb78..1247c3e 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,12 @@