package com.weiwojc.controller;
|
|
import com.weiwojc.model.common.Result;
|
import com.weiwojc.model.dto.UserLoginDTO;
|
import com.weiwojc.model.dto.UserRegisterDTO;
|
import com.weiwojc.model.entity.User;
|
import com.weiwojc.service.UserService;
|
import com.weiwojc.utils.JwtUtils;
|
import com.weiwojc.utils.TokenBlacklistManager;
|
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.validation.Valid;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.web.bind.annotation.*;
|
|
@RestController
|
@RequestMapping("/api/users")
|
@RequiredArgsConstructor
|
public class UserController {
|
|
private final UserService userService;
|
private final JwtUtils jwtUtils;
|
private final TokenBlacklistManager tokenBlacklistManager;
|
|
@PostMapping("/register")
|
public Result<User> register(@Valid @RequestBody UserRegisterDTO registerDTO) {
|
User user = userService.register(registerDTO);
|
return Result.success("注册成功", user);
|
}
|
|
@PostMapping("/login")
|
public Result<String> login(@Valid @RequestBody UserLoginDTO loginDTO) {
|
String token = userService.login(loginDTO);
|
return Result.success("登录成功", token);
|
}
|
|
@PostMapping("/logout")
|
public Result<String> logout(HttpServletRequest request) {
|
String token = request.getHeader("token");
|
if (token == null || token.isEmpty()) {
|
return Result.error("未登录状态");
|
}
|
|
// 验证token是否有效
|
if (!jwtUtils.validateToken(token)) {
|
return Result.unauthorized("token无效或已过期");
|
}
|
|
// 将token加入黑名单
|
tokenBlacklistManager.addToBlacklist(token);
|
return Result.success("退出登录成功");
|
}
|
|
@GetMapping("/info")
|
public Result<User> getUserInfo(HttpServletRequest request) {
|
String token = request.getHeader("token");
|
// 验证token是否存在
|
if (token == null || token.isEmpty()) {
|
return Result.unauthorized("未登录或token无效");
|
}
|
|
// 验证token是否有效
|
if (!jwtUtils.validateToken(token)) {
|
return Result.unauthorized("token无效或已过期");
|
}
|
|
Long userId = jwtUtils.getUserIdFromToken(token);
|
User user = userService.getUserInfo(userId);
|
if (user == null) {
|
return Result.error("用户不存在");
|
}
|
|
return Result.success(user);
|
}
|
}
|