Spring-boot攔截器Interceptor使用

1. 自定義攔截器

Spring-boot中的攔截器通過實(shí)現(xiàn)HandlerInerceptor中的方法來定義,其中包含三個(gè)方法
preHandle:請(qǐng)求執(zhí)行前執(zhí)行
postHandle:請(qǐng)求結(jié)束執(zhí)行
afterCompletion:視圖渲染完成后執(zhí)行
創(chuàng)建自定義攔截器類TestInterceptor.java

TestInterceptor.java

package com.seasky.servicesitespring.interceptor;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class TestInterceptor implements HandlerInterceptor {
    private static final Logger logger = LogManager.getLogger();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //這里在請(qǐng)求執(zhí)行前獲取token
        String token = request.getHeader("Authorization");
        logger.info("TestInterceptor preHandle token: " + token);

        if(token == null || token.isEmpty()) {
            return false;//返回false表示被攔截,后續(xù)請(qǐng)求不在執(zhí)行
        }

        return true;//返回true表示通過,繼續(xù)執(zhí)行后續(xù)攔截器,如果是最后一個(gè)攔截器,則執(zhí)行controller
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("TestInterceptor postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("TestInterceptor afterCompletion");
    }
}

2. 注冊(cè)攔截器

Spring-boot中通過實(shí)現(xiàn)接口WebMvcConfigurer中的addInterceptors方法注冊(cè)自定義的攔截器。
需要注意不要使用WebMvcConfigurerAdapter,該方法已經(jīng)被官方標(biāo)注過時(shí)。
創(chuàng)建攔截器注冊(cè)類InterceptorConfig.java

InterceptorConfig.java

package com.seasky.servicesitespring.config;

import com.seasky.servicesitespring.interceptor.TestInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

//使用Configuration注解,使spring-boot啟動(dòng)時(shí)可以自動(dòng)掃描
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    /**
     * 注冊(cè)攔截器方法
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //添加自定義的攔截器,并設(shè)置攔截路徑規(guī)則
        registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
    }
}


之后運(yùn)行程序,調(diào)用controller時(shí)會(huì)發(fā)現(xiàn)攔截器已經(jīng)生效,命令行中可以看到日志輸出。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容