建立一個簡單的Interceptor來看看請求的生命週期
preHandle: 進來Controller之前
postHandle:執行完API
afterCompletion:全部完成後

implements HandlerInterceptor

@Slf4j
@Component
public class MessageInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {

        log.info("MessageInterceptor.preHandle():進入API前");
        /*
         * 應用
         * 1.獲取headers裏的author-Cookie
       * 2.根據cookie使用userService查找當前user
       * 3.存在且激活 當前用戶信息設置到ThreadLocal return true;
       * 4.不存在 或 未激活 return false;
         */
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable ModelAndView modelAndView) {

        log.info("MessageInterceptor.postHandle():API執行完畢");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,@Nullable Exception ex) {

        log.info("MessageInterceptor.afterCompletion:執行完畢後");
        // destroy
    }
}

建立完這個攔截器後需要註冊,這樣啟動後才會去攔截url
addPathPatterns這邊要設定url

implements WebMvcConfigurer

@Configuration
@EnableWebMvc
public class InterceptorWebMvcConfig implements WebMvcConfigurer {

    @Autowired
    private MessageInterceptor messageInterceptor;

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

都完成後就會進行攔截

這不是一個給新手的一個教學過程,也寫的不是很完整
希望大家多多包涵囉~

主要是給自己的一個紀錄,也分享給有需要的夥伴

這是一個心血來潮,產生的文章

若有喜歡或交流的部分都歡迎在下方留言,多多關照。

#interceptor







你可能感興趣的文章

linux程式設計--open、write、lseek

linux程式設計--open、write、lseek

CSS保健室|width、height

CSS保健室|width、height

Why you should or shouldn't use Google DNS?

Why you should or shouldn't use Google DNS?






留言討論