通過攔截器,我們可以針對特定 URI 做攔截,做相關業務處理,比如檢查用戶是否登錄,列印每個請求的處理耗時等。 一、新建一個攔截器 新建登錄驗證類 LoginValidationInterceptor.java: package site.exception.springbootintercepto ...
通過攔截器,我們可以針對特定 URI 做攔截,做相關業務處理,比如檢查用戶是否登錄,列印每個請求的處理耗時等。
一、新建一個攔截器
新建登錄驗證類 LoginValidationInterceptor.java
:
package site.exception.springbootinterceptor.interceptor;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import site.exception.springbootinterceptor.entity.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @time 12:19
* @discription 登錄驗證攔截器
**/
public class LoginValidationInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle ...");
User user = (User) request.getSession().getAttribute("user");
if (user == null) {
// 若未登錄,重定向到登錄頁面
response.sendRedirect("login.html");
return false;
}
// 若已登錄,繼續往下執行
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
System.out.println("postHandle ...");
// controller 方法調用完畢後,執行此方法
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
System.out.println("afterCompletion ...");
// 頁面渲染完成後調用此方法, 一般用來清除某些資源等
}
}
定義一個攔截器類後,您需要實現 HandlerInterceptor
介面,其有三個方法可以重寫:
- preHandle: 在調用 Controller 方法之前,執行此方法;
- postHandle: 在調用 Controller 方法之後,頁面渲染之前,執行此方法,通常您可以在此方法中將渲染的視圖名稱更改為其他視圖名稱;
- afterCompletion: 此方法在頁面渲染完畢之後被調用;
二、配置攔截器
上面,您已經定義好一個登陸攔截的攔截器了,接下來,需要做一下全局配置。
新建 WebMvcConfig.java
配置類:
package site.exception.springbootinterceptor.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import site.exception.springbootinterceptor.interceptor.LoginValidationInterceptor;
/**
* @time 12:17
* @discription
**/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 配置攔截器
* @param interceptorRegistry
*/
@Override
public void addInterceptors(InterceptorRegistry interceptorRegistry) {
// 攔截所有 /admin/** 的訪問地址
interceptorRegistry.addInterceptor(new LoginValidationInterceptor()).addPathPatterns("/admin/**");
}
}
到此,一個簡單的攔截器就配置完成了!
本文來自博客園,作者:深碼青年,轉載請註明原文鏈接:https://www.cnblogs.com/shenMaQN/p/17764279.html