2
2
.
.
2
2
.
.
2
2
C
C
r
r
e
e
a
a
t
t
e
e
I
I
n
n
t
t
e
e
r
r
c
c
e
e
p
p
t
t
o
o
r
r
C
C
h
h
a
a
i
i
n
n
I
I
n
n
f
f
o
o
[
[
G
G
]
]
This tutorial shows how to create Interceptor Chain.
Order in which they are added to configuration defines order in which their Methods are executed
their prehandle() Methods are executed during HTTP Request in that order
their posthandle() Methods are executed during HTTP Response in reverse order
their afterCompletion() Methods are executed during HTTP Response in reverse order
Application Schema [Results]
Spring Boot Starters
GROUP
DEPENDENCY
DESCRIPTION
Web
Spring Web
Enables: Controller Annotations, Tomcat Server
P
P
r
r
o
o
c
c
e
e
d
d
u
u
r
r
e
e
Create Project: springboot_filter_create (add Spring Boot Starters from the table)
Create Package: controllers (inside main package)
Create Class: MyController.java (inside controllers package)
Create Package: interceptors (inside main package)
Create Class: MyInterceptor1.java (inside controllers package)
Create Class: MyInterceptor2.java (inside controllers package)
Create Class: InterceptorConfig.java (inside controllers package)
MyController.java
package com.ivoronline.springboot_interceptor.controllers;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MyController {
@ResponseBody
@RequestMapping("/Hello")
public String hello() {
System.out.println("Controller:");
return "Hello from Controller";
}
}
MyInterceptor1
MyController
Request
MyInterceptor2
Request
Response
Request
InterceptorConfig
MyInterceptor1.java
package com.ivoronline.springboot_interceptor_chain.interceptors;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor1 implements HandlerInterceptor {
//====================================================================
// PRE HANDLE
//====================================================================
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.print("MyInterceptor1: preHandle() ");
return true;
}
//====================================================================
// POST HANDLE
//====================================================================
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) {
System.out.print("MyInterceptor1: postHandle() ");
}
//====================================================================
// AFTER COMPLETION
//====================================================================
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception exception) {
System.out.print("MyInterceptor1: afterCompletion() ");
}
}
MyInterceptor2.java
package com.ivoronline.springboot_interceptor_chain.interceptors;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor2 implements HandlerInterceptor {
//====================================================================
// PRE HANDLE
//====================================================================
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.print("MyInterceptor2: preHandle() ");
return true;
}
//====================================================================
// POST HANDLE
//====================================================================
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) {
System.out.print("MyInterceptor2: postHandle() ");
}
//====================================================================
// AFTER COMPLETION
//====================================================================
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception exception) {
System.out.print("MyInterceptor2: afterCompletion() ");
}
}
InterceptorConfig.java
package com.ivoronline.springboot_interceptor_chain.interceptors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Component
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Autowired MyInterceptor1 myInterceptor1;
@Autowired MyInterceptor2 myInterceptor2;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//ORDER IN WHICH THEY ARE ADDED DEFINES ORDER IN WHICH THEIR METHODS ARE EXECUTED
//- prehandle() Methods are executed during HTTP Request in that order
//- posthandle() Methods are executed during HTTP Response in reverse order
//- afterCompletion() Methods are executed during HTTP Response in reverse order
registry.addInterceptor(myInterceptor1);
registry.addInterceptor(myInterceptor2);
}
}