1. 程式人生 > 其它 >Spring Boot 學習(一) 攔截器

Spring Boot 學習(一) 攔截器

Ctrl+F12 檢視此類的方法,關係有哪些

必須繼承這HandlerInterceptor 這個類

類中有三個方法

public class LoginIntercepter implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        目標方法執行之前

        return false
; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //   目標方法執行完成以後 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws
Exception { // 頁面渲染之後 } }
攔截器
1.配置好攔截器要攔截哪些請求
2.把這些配置放在容器中
@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        目標方法執行之前
        HttpSession session =  request.getSession();  //用於獲取request資訊
        Object loginUser = session.getAttribute("login");//
這裡的login是儲存的使用者資訊,獲取當前使用者資訊 if(loginUser != null) { return true; //放行 } request.setAttribute("msg","請先登陸"); //獲取到錯誤資訊,前提是當用戶沒有登陸或密碼錯誤,此時記錄的是錯誤提示資訊 request.getRequestDispatcher("/").forward(request,response); //重定向到預設 return false; }

建立一個config類

所有處理web事務的介面是在WebMvcConfigurer

@Configuration
public class AdminConfig implements WebMvcConfigurer {  //所有定製web功能的都是WebMvcConfigurer介面

}

其中WebMvcConfigration 中有addInterceptors這個方法

攔截住了預設是一片空白,所以在上面添加了一個攔截資訊

@Configuration
public class AdminConfig implements WebMvcConfigurer {  //所有定製web功能的都是WebMvcConfigurer介面
    public void addInterceptors(InterceptorRegistry registry) { //重寫這方法
        registry.addInterceptor(new LoginIntercepter())    //新增一個攔截器(LoginIntercepter是攔截器類,實現了介面HandlerInterceptor)
                                .addPathPatterns("/**")     //(/**)表示預設攔截所有請求   add表示要攔截哪些url請求 
                                .excludePathPatterns("/","/login");  //exclude表示放行的是哪些,此時靜態資源也被攔截,css和js生效

    }
}

因為配了/** 表示攔截所有,所以此時把靜態資源也給攔截了

此時進行新增不攔截檔案

方法一、 新增放行資料夾,靜態資原始檔夾裡的內容

.excludePathPatterns("/","/login","/css/**","/js/**","/fonts/**") 

總結

攔截器:

1.編寫一個攔截器,實現HandlerInterceptor介面

2.攔截器註冊到容器中(實現WebMvcConfigurer的addInterceptors)

3.指定攔截規則,【如果攔截所有那麼靜態資源也會被攔截】

補充:

日誌的使用

import lombok.extern.slf4j.Slf4j;
@Slf4j   在類名前加上註解
//        這裡可以新增一個日誌,獲取請求路徑
        String requesURI = request.getRequestURI();
        log.info("preHandle攔截的請求路徑是{}",requesURI);

攔截器的執行過程

preHandle -> postHandle ->afterCompletion