springboot 中攔截器的使用
阿新 • • 發佈:2018-12-14
第一步:建立一個實現 HandlerInterceptor 的類。
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class WebInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception { System.out.println("============== request before =============="); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("============== request =============="); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("============== request completion =============="); } }
說明: 1. preHandle 表示方法請求前的處理,若其返回值為FALSE,就中斷請求目標方法了,只有返回值為TRUE時才繼續執行方法內容。 2. postHandle 是在目標方法執行完之後執行的。
第二步:註冊攔截器。建立一個配置類並繼承 WebMvcConfigurerAdapter。重寫 addInterceptors 方法。
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{ public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new WebInterceptor()); System.out.println("=========== 攔截器註冊完畢 ==========="); } }
第三步:編寫普通的controller 和方法。
import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class WebController { @RequestMapping("/interceptor") public String interceptor(Model model) { model.addAttribute("hello", "hello"); System.out.println("model : " + model); return "inderceptor"; } }
最後:執行controller 方法即可在控制檯看到效果。
============== request before ==============
model : {hello=hello}
============== request ==============
============== request completion==============