Spring Boot 學習(一) 攔截器
阿新 • • 發佈:2021-06-29
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) throwsException { // 頁面渲染之後 } }
攔截器
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