中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Springboot實現攔截器功能

發布時間:2022-06-16 10:32:54 來源:億速云 閱讀:355 作者:zzz 欄目:開發技術

本篇內容介紹了“怎么在Springboot實現攔截器功能”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

怎么在Springboot實現攔截器功能

preHandle: 預先處理,在目標的controller方法執行之前,進行處理

postHandle: 在目標的controller方法執行之后,到達指定頁面之前進行處理

afterCompletion: 在頁面渲染之后進行處理

方法:

1.Springboot通過實現HandlerInterceptor接口實現攔截器

2.通過WebMvcConfigurer實現一個配置類,再通過@Configuration 注解注入到容器

3.指定攔截規則

 以用戶登錄為案例,若用戶沒有登錄session里面就沒有用戶的數據,就會轉到首頁登錄頁面

在正確登錄之后,就將reglister保存到session中,再次訪問頁面的時候,登錄攔截器就可以找到這個reglister對象,就不需要再次攔截到登錄界面了.

怎么在Springboot實現攔截器功能

怎么在Springboot實現攔截器功能

package com.zwz.springbootweb.interceptor;
 
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.websocket.Session;
 
public class LoginInterceptor implements HandlerInterceptor {
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object reglister = session.getAttribute("Reglister");
 
 
        if (reglister != null) {
            return true;
        } else {
            request.setAttribute("msg", "請先登錄!");
 
            request.getRequestDispatcher("/").forward(request,response);
            return false;
        }
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

 之后通過實現WebMvcConfigurer接口實現一個配置類,在配置類中注入攔截器,最后再通過 @Configuration 注解注入配置.并且指定攔截的路徑和需要放行的路徑.

注意:攔截器  /**   會攔截一切資源,包括靜態資源,需要將靜態資源放行

怎么在Springboot實現攔截器功能

package com.zwz.springbootweb.config;
 
import com.zwz.springbootweb.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;
 
 
@Configuration
public class WebConfig implements WebMvcConfigurer{
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/loginjudge","/","/retolo","/static/**");
    }
}

攔截器的應用場景

1、日志記錄:記錄請求信息的日志,以便進行信息監控、信息統計、計算PV(Page VIEW)等。

2、權限檢查:如登錄檢測,進入處理器檢測檢測是否登錄,如果沒有直接返回到登錄頁面;

3、性能監控:有時候系統在某段時間莫名其妙的慢,可以通過攔截器在進入處理器之前記錄開始時間,在處理完后記錄結束時間,從而得到該請求的處理時間(如果有反向代理,如apache可以自動記錄);

4、通用行為:讀取cookie得到用戶信息并將用戶對象放入請求,從而方便后續流程使用,還有如提取Locale、Theme信息等,只要是多個處理器都需要的即可使用攔截器實現。

5、OpenSessionInView:如Hibernate,在進入處理器打開SESSION,在完成后關閉SESSION。

攔截器與過濾器的區別

1、攔截器是基于Java的反射機制的,而過濾器是基于函數回調。

2、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。

3、攔截器只能對ACTION請求起作用,而過濾器則可以對幾乎所有的請求起作用。

4、攔截器可以訪問ACTION上下文、值棧里的對象,而過濾器不能訪問。

5、在ACTION的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次。

6、攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調用業務邏輯。

“怎么在Springboot實現攔截器功能”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淄博市| 淳化县| 布拖县| 邢台市| 顺昌县| 西畴县| 武胜县| 县级市| 息烽县| 临沂市| 喀什市| 大余县| 盖州市| 荣昌县| 中西区| 安徽省| 神木县| 龙井市| 宜兰市| 佳木斯市| 佛冈县| 高阳县| 三明市| 安塞县| 赞皇县| 乌海市| 宜城市| 宜春市| 广德县| 靖宇县| 长阳| 尼勒克县| 湟中县| 荣昌县| 乾安县| 措勤县| 高唐县| 蒙自县| 富裕县| 保康县| 玛多县|