화면



JavaScript
headerLoad();
async function headerLoad(){
let page = document.querySelector(".t1-auth-links");
let userDetailes = await getAuthentication();
if(userDetailes==null){
page.innerHTML=`
<div>
<a href="/login-form">로그인 / </a>
<a href="/join-form"> 회원가입</a>
</div>
`
}else {
if (userDetailes.role === "ROLE_USER") {
page.innerHTML = `
<div>
<a href="/logout">로그아웃 / </a>
<a href="/s/user-info/">마이페이지</a>
</div>
`;
} else if (userDetailes.role === "ROLE_ADMIN") {
page.innerHTML = `
<div>
<a href="/logout">로그아웃 / </a>
<a href="/admin/category">관리자페이지</a>
</div>
`;
}
}
}
async function getAuthentication(){
let url = `/api/v1/authentication`;
let response = await fetch(url);
let responseData = await response.json();
let userDetails = responseData.data;
return userDetails;
}
Controller
// 인증
@ResponseBody
@GetMapping("/api/v1/authentication")
public ResponseEntity<?> getUserDetails(@AuthenticationPrincipal UserDetails userDetails) {
CommonResp<UserDetails> resp = CommonResp.success(userDetails);
return new ResponseEntity<>(resp, HttpStatus.OK);
}
해설
Spring Security를 활용하여 로그인 정보를 가지고 있는 @AuthenticationPrincipal을 사용해
유저의 정보를 인증함
인증된 정보가 없다면 로그인/회원가입을 표시
인증된 정보가 있다면
유저의 권한을 확인
권한이 USER이라면 로그아웃/ 마이페이지 표시
권한인 ADMIN이라면 로그아웃/ 관리자페이지로 표
Share article