From 7c6116f2c5faa4a138b4578df2d825babb9cb242 Mon Sep 17 00:00:00 2001 From: myh Date: Mon, 11 Dec 2023 00:01:40 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=BD=93=E5=89=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springdemo/controller/AuthController.java | 45 ++++++++++++++++++- .../springdemo/service/AuthService.java | 3 ++ .../serviceImpl/AuthServiceImpl.java | 5 +++ 3 files changed, 52 insertions(+), 1 deletion(-) 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; + } }