v4 - 인터셉터 설정해보기

coding S's avatar
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