diff --git a/src/main/java/com/example/springdemo/controller/AuthController.java b/src/main/java/com/example/springdemo/controller/AuthController.java index 01f557b..a108d32 100644 --- a/src/main/java/com/example/springdemo/controller/AuthController.java +++ b/src/main/java/com/example/springdemo/controller/AuthController.java @@ -3,8 +3,15 @@ package com.example.springdemo.controller; import com.example.springdemo.security.dto.JwtAuthResponse; import com.example.springdemo.security.dto.LoginDto; import com.example.springdemo.service.AuthService; +import com.example.springdemo.utils.Result; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import org.jetbrains.annotations.NotNull; import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,6 +23,9 @@ public class AuthController { @Resource private AuthService authService; + @Resource + private UserDetailsService userDetailsService; + // Login REST API @PostMapping("/login") public ResponseEntity authenticate(@RequestBody LoginDto loginDto) { @@ -25,4 +35,37 @@ public class AuthController { return ResponseEntity.ok(jwtAuthResponse); } -} + + @PostMapping("/profile") + public Result profile(@NotNull HttpServletRequest request) { + String token; + String bearerToken = request.getHeader("Authorization"); + Result result = new Result<>(); + // 从 request 获取 JWT token + if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) { + token = bearerToken.substring(7); + } else { + token = ""; + } + // 校验 token + if (StringUtils.hasText(token) && authService.getJwtTokenProvider().validateToken(token)) { + // 从 token 获取 username + String username = authService.getJwtTokenProvider().getUsername(token); + // 加载与 token 关联的用户 + UserDetails userDetails = userDetailsService.loadUserByUsername(username); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( + userDetails, + null, + userDetails.getAuthorities() + ); + result.setStatus(200); + result.setMessage("success"); + result.setData(authenticationToken); + } else { + result.setStatus(401); + result.setMessage("fail"); + } + return result; + } + +} \ No newline at end of file diff --git a/src/main/java/com/example/springdemo/service/AuthService.java b/src/main/java/com/example/springdemo/service/AuthService.java index bd785b3..8b0d8fc 100644 --- a/src/main/java/com/example/springdemo/service/AuthService.java +++ b/src/main/java/com/example/springdemo/service/AuthService.java @@ -1,7 +1,10 @@ package com.example.springdemo.service; import com.example.springdemo.security.dto.LoginDto; +import com.example.springdemo.security.utils.JwtTokenProvider; public interface AuthService { String login(LoginDto loginDto); + + JwtTokenProvider getJwtTokenProvider(); } diff --git a/src/main/java/com/example/springdemo/serviceImpl/AuthServiceImpl.java b/src/main/java/com/example/springdemo/serviceImpl/AuthServiceImpl.java index e04ded9..620cc67 100644 --- a/src/main/java/com/example/springdemo/serviceImpl/AuthServiceImpl.java +++ b/src/main/java/com/example/springdemo/serviceImpl/AuthServiceImpl.java @@ -26,4 +26,9 @@ public class AuthServiceImpl implements AuthService { SecurityContextHolder.getContext().setAuthentication(authentication); return jwtTokenProvider.generateToken(authentication); } + + @Override + public JwtTokenProvider getJwtTokenProvider() { + return jwtTokenProvider; + } }