화면



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