inblog logo
|
codingb
    Spring

    v4 - 인터셉터 설정해보기

    coding S's avatar
    coding S
    Mar 16, 2024
    v4 - 인터셉터 설정해보기
    notion image
     

    1. 로그인 인터셉터 만들기

    package shop.mtcoding.blog._core.interceptor; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import shop.mtcoding.blog._core.errors.exception.Exception401; import shop.mtcoding.blog.user.User; public class LoginInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle............"); HttpSession session = request.getSession(); User sessionUser = (User) session.getAttribute("sessionUser"); if(sessionUser == null){ throw new Exception401("로그인 하셔야 해요"); } return true; } }
    💡
    오류 처리 방법을 여기서 설정 !
    💡
    왜 boolean ? return은 true false? -> true는 진입하게 해줌

    인터페이스의 default

     

    인터셉터 IoC 등록 필요 (+테스트)

    인터셉터가 스프링 MVC의 처리 과정에서 원하는 시점에 특정 로직을 실행할 수 있도록 설정하기 위해 IoC (제어의 역전) 컨테이너에 등록한다. 인터셉터를 IoC 컨테이너에 등록하는 방법 중 하나는 스프링의 설정 파일이나 설정 클래스에 인터셉터를 등록하는 것. Java 설정을 사용하는 경우, WebMvcConfigurer 인터페이스를 구현한 설정 클래스 생성
     

    [ 테스트 해보자! ]

    notion image
    💡
    인터셉터를 사용해 요청을 가로채어 사전 처리(pre-handle)나 사후 처리(post-handle)를 수행
     

    [ 회원정보 수정 들어가면 콘솔에 뜸 ]

    notion image
    💡
    postHandle은 인증 구현할 필요 없지만, preHandle은 구현 해야함
     

     
    notion image
    user/update-form 페이지에 들어가면 하얀 화면 뜨는거 잡아야한다... -> throw 처리
    notion image
    notion image
     
     

    2. 로그인 인터셉터 등록하기

    notion image
    package shop.mtcoding.blog._core.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import shop.mtcoding.blog._core.interceptor.LoginInterceptor; @Configuration // IoC public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LoginInterceptor()) .addPathPatterns("/board/**", "/user/**") .excludePathPatterns("/board/{id:\\d+}"); } }
    💡
    /board/{id:\\d+} 상세보기 인증 제외
    💡
    장점 - throw 가능 !
     

    [ 되는지 확인! ]

    notion image

    notion image
    💡
    게시글 상세보기 이런 것들은 들어가지는데, 인증이 필요한 페이지들은 막아놓은 것 확인!
    💡
    그럼 인증 처리 끝!!! 이제 인증이 필요한 페이지는 모두 인증이 필요하다고 다 뜰 것임 session if~~ 뭐 이런 로직 안짜도 됨! 한방에 끝나버림!
     

    인터셉터 처리하지 않으면?

    notion image
    이 코드 기억나지? 이런거 작성해줘야함. 직접 해야해서 너무 불편하다!
    notion image
    아니면 이런 식으로 login-form으로 리다이렉션 시켜주던가.. 하나 하나 해줘야함
     

    그러니까 핸들러 처리하자!

    notion image
    💡
    throw new Exception401 (”로그인 하셔야 해요”); 이 코드가 짱 !
     
     

    TIP!

    💡
    AJAX 할 거면 이름 다르게 해서 지금 이거랑 똑같이 만들면 됨!
     
    Share article

    codingb

    RSS·Powered by Inblog