AdminIntercepter(Enum에 대한 오류 해결)

2024. 12. 29. 23:24·토이 프로젝트 2

/admin이 붙은 Url을 맵핑할 때 Controller로 접근하기전 AdminInterceptor를 통해서 MemberType이 "ADMIN"인 아이디만 접근 가능하게 하려고 하였으나 "ADMIN"인데도 불구하고 if문을 타는 현상이 발생했다.

 

디버깅을 통해서 확인을 해보았을때에도 문제가 없다고 생각하였으나 긴 시간 끝에 해결하였다.

 

원인은 MemberType을 Enum으로 관리를 하였는데 여기서 Enum은 불변 객체이기 때문에 문자열"ADMIN"과 비교했을 때에는 False가 반환될 수 밖에 없는 상황이었다. 

 

[원인]

Enum 타입과 일반 문자열 간에 equals 비교 결과가 false가 나오는 이유는 Enum 타입과 String 타입은 완전히 다른 타입이기 때문이다.

Enum 타입은 자바에서 열거형 타입을 표현하는 특별한 클래스이고, 이 클래스는 내부적으로 정해진 상수 값들을 갖는다. 반면, 일반 문자열은 단순한 String 객체입니다. equals 메서드는 두 객체의 타입과 내용을 비교하기 때문에, 서로 다른 타입을 비교하면 false를 반환한다.

 

[기존]

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HttpSession session = request.getSession(false);

    // session이 null인지 먼저 확인
    if (session == null) {
        log.info(">>>>>>>>>> Session is null");
        response.sendRedirect("/errorAccess");
        return false;
    }

    Object member = session.getAttribute("memberType");

    // member 값이 "ADMIN"이 아닌 경우 처리
    if (!("ADMIN".equals(member))) {
        log.info(">>>>>>>>>> Session memberType: {}", member);
        response.sendRedirect("/errorAccess");
        return false;
    } // 미치겠네 진짜  admin 인데 왜자꾸 이 조건문을 타는거냐고~~~~!!!!!! null은 아닌데 확실히./

    return true;
}

 

[해결]

MemberType member = (MemberType) session.getAttribute("memberType");

    // member 값이 "ADMIN"이 아닌 경우 처리
    if (!(MemberType.ADMIN.equals(member))) {
        log.info(">>>>>>>>>> Session memberType: {}", member);
        response.sendRedirect("/errorAccess");
        return false;
    } 

    return true;
}

 

'토이 프로젝트 2' 카테고리의 다른 글

로그인 횟수 제한 구현  (0) 2024.12.28
비밀번호 찾기 구현  (1) 2024.12.27
Interceptor(권한) 구현  (1) 2024.12.26
커스텀 어노테이션 추가, ExceptionHandler 추가  (0) 2024.12.25
회원가입시 비밀번호 암호화(bCrypto)  (0) 2024.12.24
'토이 프로젝트 2' 카테고리의 다른 글
  • 로그인 횟수 제한 구현
  • 비밀번호 찾기 구현
  • Interceptor(권한) 구현
  • 커스텀 어노테이션 추가, ExceptionHandler 추가
신댕인생
신댕인생
안녕하세요!! 예비개발자 신댕입니다. 개발자를 준비하고 있는 신댕인생의 하루하루를 정리하고 있어요. 파이팅!
  • 신댕인생
    신댕인생
    신댕인생
  • 전체
    오늘
    어제
    • 분류 전체보기 (127)
      • 다시 준비 (0)
        • 계획(ISTJ) (0)
        • 정보처리기사 (0)
        • SQLD (0)
        • Toeic Speaking (0)
        • 일일 회고 (0)
      • 데브캠프 일지 (52)
        • 예제 (6)
        • 연습문제 (12)
        • 과제 (2)
        • 칠판 정리 (1)
        • 숙지용 필기 (11)
      • 책 (12)
        • Clean Architecture (2)
        • 개발자도 궁금한 IT 인프라 (1)
        • JVM 밑바닥까지 파헤치기 (9)
      • DB (23)
        • 숙지용 필기 (12)
        • SQL 쿼리 실습 (7)
        • 극장 시스템 모델링 (3)
      • 토이 프로젝트 2 (7)
      • 토이 프로젝트 3 (0)
      • 뚜띠 (3)
      • 회고 (0)
        • 주간 회고 (0)
        • 월간 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    지네릭스
    연습문제
    패스트캠퍼스 부트캠프
    SQL
    sql의 정석
    ERD
    spring
    패스트캠퍼스 데브캠프
    패스트캠퍼스
    JPA
    패스트 캠퍼스
    spring의 정석
    남궁성
    백엔드 부트캠프
    머신러닝 교과서
    jvm
    부트캠프
    데브캠프
    쿼리 실습
    자바의 정석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
신댕인생
AdminIntercepter(Enum에 대한 오류 해결)
상단으로

티스토리툴바