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 인터페이스를 구현한 설정 클래스 생성
[ 테스트 해보자! ]
인터셉터를 사용해 요청을 가로채어
사전 처리(pre-handle)나 사후 처리(post-handle)를 수행
[ 회원정보 수정 들어가면 콘솔에 뜸 ]
postHandle은 인증 구현할 필요 없지만, preHandle은 구현 해야함
user/update-form 페이지에 들어가면 하얀 화면 뜨는거 잡아야한다... -> throw 처리
2. 로그인 인터셉터 등록하기
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 가능 !
[ 되는지 확인! ]
게시글 상세보기 이런 것들은 들어가지는데, 인증이 필요한 페이지들은 막아놓은 것 확인!
그럼 인증 처리 끝!!! 이제 인증이 필요한 페이지는 모두 인증이 필요하다고 다 뜰 것임
session if~~ 뭐 이런 로직 안짜도 됨! 한방에 끝나버림!
인터셉터 처리하지 않으면?
TIP!
AJAX 할 거면 이름 다르게 해서 지금 이거랑 똑같이 만들면 됨!
Share article