- [JPA] 24. Mustache를 사용한 Blog 제작 - 인터셉터 만들기2024년 10월 11일
- Song hyun
- 작성자
- 2024.10.11.:41
728x90반응형[JPA] 24. Mustache를 사용한 Blog 제작 - 인터셉터 만들기
1. 인터셉터란?
- 인터셉터는 스프링 MVC에서 제공하는 기능으로, 클라이언트의 요청을 처리하는 과정에서 특정 작업을 수행할 수 있게 도와준다.
- 인터셉터는 컨트롤러 URI에 접근하는 과정에서 요청을 가로채어, 전처리를 해준다.
2. 필터와 인터셉터간의 차이점
3. 인터셉터 클래스 제작하기 : LogInIntercptor.java -> HandlerInterceptor를 구현
package com.tenco.blog_v1.common.config; import com.tenco.blog_v1.common.errors.Exception400; import com.tenco.blog_v1.common.errors.Exception401; import com.tenco.blog_v1.user.User; 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; // IoC를 안 한 상태이다. public class LogInInterceptor implements HandlerInterceptor { /** * 컨트롤러 메서드 호출 전에 실행되는 메서드이다. * @param request current HTTP request * @param response current HTTP response * @param handler chosen handler to execute, for type and/or instance evaluation * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("LogInterceptor preHandle 실행"); // 로그인 여부 판단 HttpSession session = request.getSession(false); // 기존 세션이 없다면 null 반환한다. if(session == null){ throw new Exception401("로그인이 필요합니다."); } // 키-값 ---> 세션 메모리지에 저장, 방식은 map 구조 (sessionUser) 문자열 사용 중 User sessionUser = (User) session.getAttribute("sessionUser"); if(sessionUser == null){ throw new Exception401("로그인이 필요합니다."); } // return false <-- 이면 컨트롤러로 들어가지 않는다 // return HandlerInterceptor.super.preHandle(request,response,handler); } /** * 컨트롤러 실행 후, 뷰가 렌더링 되기 전에 실행되는 메서드 * @param request current HTTP request * @param response current HTTP response * @param handler the handler (or {@link HandlerMethod}) that started asynchronous * execution, for type and/or instance examination * @param modelAndView the {@code ModelAndView} that the handler returned * (can also be {@code null}) * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } /** * 뷰가 렌더링 된 후 실행되는 메서드 * @param request current HTTP request * @param response current HTTP response * @param handler the handler (or {@link HandlerMethod}) that started asynchronous * execution, for type and/or instance examination * @param ex any exception thrown on handler execution, if any; this does not * include exceptions that have been handled through an exception resolver * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
3. WebConfigurer 클래스 제작하기 : WebConfig.java -> WebMvcConfigurer 구현
*아직 Bean 처리가 되어있지 않다.
*@Bean : 메서드가 반환하는 객체를 스프링의 빈으로 등록한다.*LogInInterceptor:
package com.tenco.blog_v1.common.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Autowired // DI 처리 private LogInInterceptor logInInterceptor; /** * 인터셉터를 등록하고 적용할 URL 패턴을 설정하는 메서드이다. * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(logInInterceptor) .addPathPatterns("/protexted/**") // Interceptor를 적용시킬 경로 패턴 설정 .excludePathPatterns("/public/**","/login","/logout"); // 인터셉터를 제외할 경로 패턴 설정 } }
728x90반응형'JPA' 카테고리의 다른 글
[JPA] 26. 댓글 목록 보기 기능 (0) 2024.10.17 [JPA] 25. 댓글 기능 작성하기 (1) 2024.10.16 [JPA] 23. Mustache를 사용한 Blog 제작 - 에러 컨트롤러 및 커스텀 익셉션 만들기 (0) 2024.10.11 [JPA] 22. Mustache를 사용한 Blog 제작 - 에러 페이지 만들기 (0) 2024.10.11 [JPA] 21. Stream API 연습 문제 (0) 2024.10.01 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)