23/11/12 작업 일지

song yuheon·2023년 11월 12일
0

Project

목록 보기
27/31
post-thumbnail

1. 검색 기능 업그레이드



  • 기존 페이징 버전(v3)
  • 슬라이스 방식의 버전(v4)
  • 무한 스크롤 기능(is1)
  • 엘라스틱 서치 기능(el1)

2. 프론트엔드 네비게이션 변경


  • 로그인 상태에 따른 UI 변경
    • 비로그인 상태: 로그인 메뉴 표시, 로그아웃 메뉴 숨김
    • 로그인 상태: 로그인 메뉴 숨김, 로그아웃 메뉴 표시
  • 사용자의 역할(Role)에 따른 메뉴 표시 변경
    • 일반 사용자: 도서 검색, 도서 나눔 신청, 마이페이지 접근 가능
    • 관리자: 관리자 전용 메뉴들에 접근 가능

기존 모든 코드에 Model을 통해 권한을 전달하는 건 비효율적
-> AOP를 이용해서 전체를 한꺼번에 처리하는 것을 시도

AOP 적용에 시간이 걸릴 것 같기에 viewController에 하나하나 추가하는 걸로 변경

트러블 슈팅

문제 상황
SecurityUtil.getPrincipal() 메서드가 String 타입의 객체를 반환하고 있지만, 이를 UserDetailsImpl 타입으로 캐스팅하려고 시도했기 때문에 문제가 발생하였다고 한다.
String?

이를 해결하기 위해 토큰이 아무것도 없을때에는 어떻게 SecurityContext가 구성되는지 확인할 필요가 있어보인다.

토큰이 없을 때는 위와 같이
securityContextHolder의 authentication.principal에 anonymousUser라는 문자열이 들어간 다는 것을 알 수 있다.

그럼 로직을 2가지로 나누어야한다.
string일때와 user일때

토큰이 있을때 ADMIN, USER, 그외에 로그인하지 않아서 토큰이 없을때는 Anonymous로 분류한다.


프론트 layout에 적용

ADMIN -> home, search, User, Admin, Donation, about team 258, logout 보이도록 설정

USER -> home, search, user, donation, about team 258, logout 보이도록 설정

ANONYMOUS -> home, Login, Signup, Search, about team 258 보이도록 설정


logout 기능 구현



    @GetMapping("/logoutView")
    public String logoutView(Model model){
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response = attributes.getResponse();

        /**
         * 쿠키 삭제 기능 추가
         */
        Cookie cookie = new Cookie("Authorization", null);
        cookie.setMaxAge(0);
        cookie.setPath("/");
        response.addCookie(cookie);

        return "redirect:/";
    }

프론트 작업 완료


  • Admin Login

  • Login하지 않은 상태

  • User Login


profile
backend_Devloper

0개의 댓글