์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค.
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
์์ ์๋ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ด์ฉํด์ ์ ์ ๋ฅผ ๋ถ๋ฌ์๋ค.
SecurityContext์ ์ธ์ฆ๋ Authentication ๊ฐ์ฒด๋ฅผ ๋ฃ์ด๋๊ณ ํ์ฌ ์ค๋ ๋ ๋ด์์ ๊ณต์ ๋์ด ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด getName()๋ง ๋ถ๋ฅผ ์๋ฐ์ ์๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ ์๋์ง ์ฐพ์๋ณด๋ ์ค์ @AuthenticationPrincipal ์ด๋ ธํ ์ด์ ํ๋ ๋ถ์ฌ์ ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๊ฐ์ฅ ์ง๊ด์ ์ด๊ณ ํธ๋ฆฌํ ๊ฒ ๊ฐ์ด ๋๊ปด์ ธ ์ด ๋ฐฉ๋ฒ์ ์ ํํด ๊ตฌํํ๋ค.
์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์.
@AuthenticationPrincipal
@AuthenticationPrincipal ์ ์ฌ์ฉํ๋ฉด ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ๊ฐ์ฒด(UserDetails ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์ ๊ฐ์ฒด)๋ฅผ ์ธ์์ ์ฃผ์ ํ์ฌ JWT ์ ๋ณด์ ํํฐ๋ง๋ ์ ์ ์ ๋ณด๋ฅผ Controller์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
@RestController
public class GetUserWithAuthenticationPrincipalAnnotationController {
@GetMapping("/user")
public String getUser(@AuthenticationPrincipal UserDetails userDetails) {
return "User Details: " + userDetails.getUsername();
}
}
โ๏ธ ์๋์๋ฆฌ
@AuthenticationPrincipal ์ด๋ ธํ ์ด์ ์๋ ์๋ฆฌ๋ ์์ ๊ฐ๋ค.
์ฌ์ฉ์ ์ธ์ฆ ๋ฐ ๊ถํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ SecurityContext์์ ์ธ์ฆ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ณ , authentication ๋ณ์๋ฅผ ํตํด ์ ๊ทผํ ์ ์๊ฒ ํ๋ค.
Authentication ๊ฐ์ฒด๋ getPrincipal()๋ก ํ์ฌ ์ฌ์ฉ์์ ์ฃผ์ฒด(Principal)์ ๋ฐํํ๊ณ ์ด๋ ธํ ์ด์ ์ด ๋ถ์ parameter๋ฅผ ์ฐพ์์ ๋ฐํํด์ฃผ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ ๊ฒ์ด๋ค.
๊ฒฐ๊ตญ SecurityContextHolder์ ์ ์ฅ๋ ์ธ์ฆ ๊ฐ์ฒด์ principal์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ค์ฌ์ค ๊ฒ์ด๋ค!
User ๊ฐ์ฒด ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ ์ ๊ฐ์ฒด๋ฅผ ์ ๋ถ ๊ฐ์ ธ์ ํ์ํ ์ ๋ณด๋ค์ ์ฌ์ฉํ๊ณ ์ถ์๋ค.
๋ณดํต UserDetails ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ฌ์ฉ์ ์ง์ ํด๋์ค๋ฅผ ์์ฑํด ์ฌ์ฉ์์ ๊ธฐ๋ณธ์ ๋ณด + ์ฌ์ฉ์ ์ง์ ํ๋๋ฅผ ํฌํจํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ์ง๋ง ์ด๋ฒ์๋ UserAccount๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์์ฑํด๋ณด์๋ค.
์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ก๋ํ๋ ๋ฉ์๋์ธ loadUserByUsername()๋ฅผ ํตํด UserAccount ํด๋์ค๊ฐ ๋ฐํ๋๋๋ก ์์ฑํ๋ค.
ํด๋น ๋ฉ์๋๋ ์์ ๊ฐ์ด ํ์ฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ ์ ์ ๋ชจ๋ ํ๋๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
'Spring > Spring & Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Example<T> ์ธํฐํ์ด์ค (0) | 2025.03.11 |
---|---|
[Spring] Spring Batch 5 ์ฌ์ฉํด๋ณด๊ธฐ (0) | 2024.07.31 |
[Spring] Spring Batch๋ก ํ ๋ฌ ์ง๋ ๋ฐ์ดํฐ ์ญ์ ํ๊ธฐ (0) | 2024.07.29 |
[Spring/Spring Boot] SSE (Server-Sent Events)์ EventSource ์ ์ฉํด๋ณด๊ธฐ (0) | 2024.05.14 |
[Spring] ํํฐ(Filter)์ ์ธํฐ์ ํฐ(Interceptor) (0) | 2024.03.18 |