1. 程式人生 > >在SpringBoot中使用 攔截器

在SpringBoot中使用 攔截器

在 SpringBoot中使用攔截器

攔截器介面 HandlerInterceptor

public interface HandlerInterceptor {


    boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception;


    void postHandle(
            HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
            throws
Exception; void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; }

實現自定義的攔截器需要實現HandlerInterceptor介面

例如:LogHandlerInteceptor

public class LogHandlerInterceptor implements HandlerInterceptor
{
/** * controller 執行之前呼叫 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("------preHandle-----"); return true; } /** * controller 執行之後,且頁面渲染之前呼叫 */
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("------postHandle-----"); } /** * 頁面渲染之後呼叫,一般用於資源清理操作 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("------afterCompletion-----"); } }

註冊攔截器

@Configuration
public class MyWebConfig extends WebMvcConfigurerAdapter{

    /**
     * 註冊 攔截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogHandlerInterceptor());
    }

}

測試:

UserController

@RestController
public class UserController {

    @GetMapping("/user/home")
    public String home(){
        System.out.println("--- user home ---");
        return "user home";
    }

}

這裡寫圖片描述

這裡寫圖片描述