diff --git a/src/main/java/asia/yulinling/workflow/constant/Status.java b/src/main/java/asia/yulinling/workflow/constant/Status.java index e77da16..2c8cacb 100644 --- a/src/main/java/asia/yulinling/workflow/constant/Status.java +++ b/src/main/java/asia/yulinling/workflow/constant/Status.java @@ -21,6 +21,9 @@ public enum Status { /** 退出成功! */ LOGOUT(200, "退出成功!"), + /** 登录成功! */ + LOGIN_SUCCESS(200, "登录成功!"), + /** 请先登录! */ UNAUTHORIZED(401, "请先登录!"), diff --git a/src/main/java/asia/yulinling/workflow/controller/AuthController.java b/src/main/java/asia/yulinling/workflow/controller/AuthController.java index 158d12b..0116f71 100644 --- a/src/main/java/asia/yulinling/workflow/controller/AuthController.java +++ b/src/main/java/asia/yulinling/workflow/controller/AuthController.java @@ -2,8 +2,8 @@ package asia.yulinling.workflow.controller; import asia.yulinling.workflow.dto.request.LoginRequest; import asia.yulinling.workflow.dto.request.RegisterRequest; -import asia.yulinling.workflow.dto.response.JWTAuthResponse; import asia.yulinling.workflow.model.ApiResponse; +import asia.yulinling.workflow.model.vo.LoginVO; import asia.yulinling.workflow.model.vo.RegisterVO; import asia.yulinling.workflow.service.AuthService; import jakarta.servlet.http.HttpServletRequest; @@ -29,10 +29,8 @@ public class AuthController { private final AuthService authService; @PostMapping("/login") - public ApiResponse login(@RequestBody LoginRequest loginRequest) { - String token = authService.login(loginRequest); - JWTAuthResponse jwtAuthResponse = new JWTAuthResponse(token); - return ApiResponse.ofSuccess(jwtAuthResponse); + public ApiResponse login(@RequestBody LoginRequest loginRequest) { + return authService.login(loginRequest); } @PostMapping("/logout") diff --git a/src/main/java/asia/yulinling/workflow/model/vo/LoginVO.java b/src/main/java/asia/yulinling/workflow/model/vo/LoginVO.java new file mode 100644 index 0000000..7bcc7b8 --- /dev/null +++ b/src/main/java/asia/yulinling/workflow/model/vo/LoginVO.java @@ -0,0 +1,21 @@ +package asia.yulinling.workflow.model.vo; + +import lombok.Builder; +import lombok.Data; + +/** + *

+ * 登录信息VO + *

+ * + * @author YLL + * @since 2025/7/3 + */ +@Data +@Builder +public class LoginVO { + private Long userId; + private String username; + private String accessToken; + private Long expiresIn; +} diff --git a/src/main/java/asia/yulinling/workflow/service/AuthService.java b/src/main/java/asia/yulinling/workflow/service/AuthService.java index 8901d19..4f9f960 100644 --- a/src/main/java/asia/yulinling/workflow/service/AuthService.java +++ b/src/main/java/asia/yulinling/workflow/service/AuthService.java @@ -3,6 +3,7 @@ package asia.yulinling.workflow.service; import asia.yulinling.workflow.dto.request.LoginRequest; import asia.yulinling.workflow.dto.request.RegisterRequest; import asia.yulinling.workflow.model.ApiResponse; +import asia.yulinling.workflow.model.vo.LoginVO; import asia.yulinling.workflow.model.vo.RegisterVO; import jakarta.servlet.http.HttpServletRequest; @@ -21,7 +22,7 @@ public interface AuthService { * @param loginRequest 登录请求 * @return token */ - String login(LoginRequest loginRequest); + ApiResponse login(LoginRequest loginRequest); /** * 退出登录 diff --git a/src/main/java/asia/yulinling/workflow/service/impl/AuthServiceImpl.java b/src/main/java/asia/yulinling/workflow/service/impl/AuthServiceImpl.java index a780512..a251772 100644 --- a/src/main/java/asia/yulinling/workflow/service/impl/AuthServiceImpl.java +++ b/src/main/java/asia/yulinling/workflow/service/impl/AuthServiceImpl.java @@ -6,7 +6,9 @@ import asia.yulinling.workflow.dto.request.RegisterRequest; import asia.yulinling.workflow.mapper.UserMapper; import asia.yulinling.workflow.model.ApiResponse; import asia.yulinling.workflow.model.entity.User; +import asia.yulinling.workflow.model.vo.LoginVO; import asia.yulinling.workflow.model.vo.RegisterVO; +import asia.yulinling.workflow.model.vo.user.UserPrincipal; import asia.yulinling.workflow.service.AuthService; import asia.yulinling.workflow.utils.JwtUtil; import cn.hutool.core.util.StrUtil; @@ -49,14 +51,26 @@ public class AuthServiceImpl implements AuthService { * @return token */ @Override - public String login(LoginRequest loginRequest) { + public ApiResponse login(LoginRequest loginRequest) { + Authentication authentication = authenticationManager.authenticate(new UsernamePasswordAuthenticationToken( loginRequest.getUsername(), loginRequest.getPassword() )); SecurityContextHolder.getContext().setAuthentication(authentication); - String token = jwtUtil.generateToken(authentication, false); - log.info("generateToken: {}", token); - return token; + + UserPrincipal userPrincipal = (UserPrincipal) authentication.getPrincipal(); + + String accessToken = jwtUtil.generateToken(authentication, false); + Long expiresIn = jwtUtil.getExpiresIn(loginRequest.getRememberMe()); + + LoginVO loginVO = LoginVO.builder() + .userId(userPrincipal.getId()) + .username(userPrincipal.getUsername()) + .accessToken(accessToken) + .expiresIn(expiresIn) + .build(); + + return ApiResponse.ofStatus(Status.LOGIN_SUCCESS, loginVO); } /** diff --git a/src/main/java/asia/yulinling/workflow/utils/JwtUtil.java b/src/main/java/asia/yulinling/workflow/utils/JwtUtil.java index f0566bc..b720b02 100644 --- a/src/main/java/asia/yulinling/workflow/utils/JwtUtil.java +++ b/src/main/java/asia/yulinling/workflow/utils/JwtUtil.java @@ -239,6 +239,16 @@ public class JwtUtil { return null; } + /** + * 根据rememberMe返回Token过期时间 + * + * @param rememberMe 记住我 + * @return Token过期时间 + */ + public Long getExpiresIn(boolean rememberMe) { + return rememberMe ? this.remember : this.ttl; + } + /** * 获取签名密钥 *