2016년 2월 3일 수요일

Using Interceptor for request, response handling

If you want to do anything when API requested, you can use interceptor for that.
For example, if you want to implement the logic that check the request whether this request is accepted by log in, session or authentication header,
you can implement that by using interceptor,and applying that by url pattern.

You can find the source code as below.

- Structure














package org.blog.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

- HelloInterceptor.java

package org.blog.test.component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

@Component
@Slf4j
public class HelloInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("interceptor intercept request");
        response.addHeader("interceptor-header", "interceptor added");
        return true;
    }

}


- WebConfig.java

package org.blog.test.configuration;

import org.blog.test.component.HelloInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class Webconfig extends WebMvcConfigurerAdapter {

    @Autowired
    private HelloInterceptor helloInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(helloInterceptor).addPathPatterns("/hello/**");
    }
}

- HelloController.java

package org.blog.test.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping(value = "/hello",
                    method = RequestMethod.GET)
    public String getHello() {
        return "hello";
    }

    @RequestMapping(value = "/bye",
                    method = RequestMethod.GET)
    public String getbye() {
        return "bye";
    }
}

- pom.xml


  4.0.0
  org.blog.test
  interceptor-test
  0.1.0
  
   org.springframework.boot
   spring-boot-starter-parent
   1.3.2.RELEASE
  
  
   
    org.springframework.boot
    spring-boot-starter-web
   
   
    org.projectlombok
    lombok
    1.16.6
   
  



- Execution Result

You can find the result that when /hello was called, "interceptor-header: interceptor added" was added as header,
and /bye was called, that is not.


댓글 없음 :

댓글 쓰기