• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring MVC 마스터하기 5
        2022년 06월 04일
        • starryeye
        • 작성자
        • 2022.06.04.:04
        반응형

        본 포스팅은 Spring MVC 마스터하기 4와 Spring MVC 마스터하기 인터셉터 1에서 이어집니다.

         

        잠깐 복습!

        @RequestMapping 컨트롤러를 사용하면

        핸들러 어댑터는 RequestMappingHandlerAdapter가 사용된다.

         

        RequestMappingHandlerAdapter는 핸들러(컨트롤러)를 호출하기 위해

        다양한 파라미터를 만들 필요가 있다.

        이때, 컨트롤러에서 사용하는 파라미터를 만들어주기 위해

        HandlerMethodArgumentResolver라는 인터페이스를 구현한 구현체들을 호출하여 해당 파라미터를 생성할 수 있다.

         

         

        HandlerMethodArgumentResolver 를 직접 구현해보고 적용해보자..

        이전에는 홈 화면을 보여줄때 로그인 여부를 체크하는 컨트롤러에서..

        @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember

        위와 같이 @SessionAttribute 어노테이션을 사용한 파라미터를 받았었다..

        직접 만든 ArgumentResolver로 대체 해보자.

         

        어노테이션 만들기

        위와 같이 파라미터에서만 사용되는 어노테이션을 만들어준다.

        @Retention(RetentionPolicy.RUNTIME) : 리플렉션을 활용 할 수 있도록 런타임까지 어노테이션 정보가 남아있음

         

        ArgumentResolver 만들기

        HandlerMethodArgumentResolver 인터페이스를 구현한다.


        supportsParameter : RequestMappingHandlerAdapter가 호출하여

        해당 컨트롤러에 적용될 ArgumentResolver인지 알아내는 메서드이다.

        -> parameter.hasParameterAnnotation(Login.class) 로 어댑터가 호출할 컨트롤러에 @Login 어노테이션이 적용되어있는지 알아본다.

        -> Member.class.isAssignableFrom(parameter.getParameterType()) 으로 해당 파라미터 타입이 Member 타입인지 확인

        -> 두 변수가 모두 참일 경우에 참으로 리턴한다.

         

        resolveArgument : supportsParameter가 참이면 호출되어 해당 파라미터를 생성하여 반환해 준다.

        -> NativeWebRequest에서 HttpServletRequest을 얻는다.

        -> 얻어낸 HttpServletRequest로 세션을 얻는다.(없으면 null리턴)

        -> 세션이 null이면 파라미터에 null을 넣어주고..

        -> 세션이 있다면 세션 속성 중, LOGIN_MEMBER(key)의 value를 찾아 반환하여 파라미터에 채워주게 된다.

         

        ArgumentResolver 등록하기

        @Configuration 을 사용한 클래스에서 WebMvcConfigurer를 implements하여..

        addArgumentResolvers 를 오버라이딩 한다.

        구현한 LoginMemberArgumentResolver 클래스를 생성하여 스프링 컨테이너에 등록해준다.

         

        컨트롤러 구현

        @Login 어노테이션이 있으면 직접 만든 ArgumentResolver가 동작하여 자동으로 세션에 있는 로그인 회원을 찾아준다.

         

        loginMember가 null 이라면 로그인이 되어있지 않은 상태이므로..

        -> 일반 홈 화면을 보여준다.

         

        loginMember가 null이 아니라면 로그인이 되어있는 상태이므로..

        -> 로그인이 된 상태의 홈 화면을 보여준다.

         

         

        반응형

        'Spring > MVC' 카테고리의 다른 글

        Spring MVC 마스터하기 예외처리 2  (0) 2022.06.11
        Spring MVC 마스터하기 예외처리 1  (0) 2022.06.11
        Spring MVC 마스터하기 인터셉터 1  (0) 2022.06.04
        Spring MVC 마스터하기 필터 1  (0) 2022.06.03
        Spring MVC 마스터하기 쿠키, 세션 4  (0) 2022.06.03
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바