ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.