-
interceptor웹페이지 제작을 위한 스프링공부 2020. 5. 12. 22:57
aop
spring frame워크에서 어떠한 메소드에 관점을 두었을때 메소드를 계속 감시하다가 메소드가 호출되면 이 메소드가 바로 동작되는것이 아닌 메소드의 호출을 가로채서 다른 메소드를 호출하는 개념
이러한 aop적용한 spring mvc요소 : interceptor
interceptor
요청 주소에 대해 관심을 갖고 요청이 발생하게 되면 요청 주소를 확인하여 Controller의 메서드를 호출 하기 전이나 후에 다른 메서드를 호출 할 수 있도록 가로 채 가는 개념 입니다.
요청 발생시 호출되는 메서드의 코드가 중복 되는 부분이 있을 때 interceptor를 통해 처리하게 됩니다.
로그인 여부 확인, 등급별 서비스 사용 권환 확인 등의 작업을 처리할 때 많이 사용합니다
interceptor는 java프로젝트와 xml프로젝트의 셋팅 방법이 각각다릅니다
interceptor 구현
interceptor는 handlerinterceptor 인터페이스를 구현하거나 handlerinterceptoradapter을 상속받은 클래스를 만들고 마등 메서드를 구현합니다.
prehandle
controller의 메서드가 호출되기 전 호출됩니다 이 메서드가 false를 반환하면 코드의 흐름이 중단됩니다
posthandle
controller의 메서드의 수행이 완료되고 view 처리를 수행하기 전에 호출됩니다
aftercompletion
view처리까지 완료되고 응답결과가 브라우저로 전달되기 전에 호출됩니다
1. handlerinterceptor 인터페이스를 구현
package kr.co.softcampus.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class TestInterceptor1 implements HandlerInterceptor{ // Controller의 메서드가 호출되기 전에 호출됩니다. // false 를 반환하면 요청 처리에 대한 진행이 중단됩니다. @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub System.out.println("TestInterceptor1 - preHandle"); return true; } // Controller의 메서드가 호출되고 난 후에 호출됩니다. @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub System.out.println("TestInterceptor1 - postHandle"); } // View 처리까지 완료되면 호출된다. @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub System.out.println("TestInterceptor1 - afterCompletion"); } }
2.인터셉터 등록
1.자바
public void addInterceptors(InterceptorRegistry registry){
}
2.xml
<interceptors> </interceptors>
package kr.co.softcampus.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import kr.co.softcampus.interceptor.TestInterceptor1; // Spring MVC 프로젝트에 관련된 설정을 하는 클래스 @Configuration // Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다. @EnableWebMvc // 스캔할 패키지를 지정한다. @ComponentScan("kr.co.softcampus.controller") public class ServletAppContext implements WebMvcConfigurer{ // Controller의 메서드가 반환하는 jsp의 이름 앞뒤에 경로와 확장자를 붙혀주도록 설정한다. @Override public void configureViewResolvers(ViewResolverRegistry registry) { // TODO Auto-generated method stub WebMvcConfigurer.super.configureViewResolvers(registry); registry.jsp("/WEB-INF/views/", ".jsp"); } // 정적 파일의 경로를 매핑한다. @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // TODO Auto-generated method stub WebMvcConfigurer.super.addResourceHandlers(registry); registry.addResourceHandler("/**").addResourceLocations("/resources/"); } // 인터셉터를 등록한다. @Override public void addInterceptors(InterceptorRegistry registry) { // TODO Auto-generated method stub TestInterceptor1 inter1 = new TestInterceptor1(); //인터셉터 객체 생성 InterceptorRegistration reg1 = registry.addInterceptor(inter1);//인터셉터 객체를 등록해줌 reg1.addPathPatterns("/test1");//주소셋팅해줌(관심사 등록 만약 test1요청이 있다면 controller로 바로 가는것이 아닌 interceptor에 있는 메소드를 호출해라 라는의미) } }
controller
package kr.co.softcampus.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class TestController { @GetMapping("/test1") public String test1() { System.out.println("test1"); return "test1"; } }
view
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>index</h1> <a href = 'test1'>test1</a> </body> </html>
출력창
TestInterceptor1 - preHandle//메소드 호출전 test1//메소드 TestInterceptor1 - postHandle//메소드 호출후 TestInterceptor1 - afterCompletion//view처리까지 완료되고 응답결과가 브라우저로 전달되기 전
'웹페이지 제작을 위한 스프링공부' 카테고리의 다른 글
mybatis(xml) (0) 2020.05.16 mybatis(java) (0) 2020.05.16 Validator (0) 2020.05.12 JSR-308 (0) 2020.05.12 JSR-303 (0) 2020.05.12