SpringBoot攔截器的使用
一、攔截器簡介
攔截器通常通過動態(tài)代理的方式來執(zhí)行。
攔截器的生命周期由IoC容器管理,可以通過注入等方式來獲取其他Bean的實例,使用更方便。
二、攔截器配置使用方式
1、過濾器攔截器作用范圍

2、攔截器的使用
示例代碼如下:
package com.rongrong.wiki.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 攔截器:Spring框架特有的,常用于登錄校驗,權(quán)限校驗,請求日志打印 /login
*/
@Component
public class LogInterceptor implements HandlerInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 打印請求信息
LOG.info("------------- LogInterceptor 開始 -------------");
LOG.info("請求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
LOG.info("遠(yuǎn)程地址: {}", request.getRemoteAddr());
long startTime = System.currentTimeMillis();
request.setAttribute("requestStartTime", startTime);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
long startTime = (Long) request.getAttribute("requestStartTime");
LOG.info("------------- LogInterceptor 結(jié)束 耗時:{} ms -------------", System.currentTimeMillis() - startTime);
}
}
將攔截器加入到配置中,示例代碼如下:
package com.rongrong.wiki.config;
import com.rongrong.wiki.interceptor.LogInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
@Resource
LogInterceptor loginInterceptor;
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login");
}
}
重新編譯啟動,查看結(jié)果如下:

三、知識點總結(jié)
1、攔截器的使用
- 返回
true會往后執(zhí)行 - 返回
false會結(jié)束,可以利用這點來做權(quán)限攔截 addPathPatterns(),要攔截請求excludePathPatterns(),排除請求,不攔截
2、攔截器和過濾器的相同與不同
- 都可以用來統(tǒng)一處理請求,比如:打印日志、權(quán)限控制
- 過濾器依賴于
servlet容器,攔截器依賴Spring框架 - 過濾器不用注入其它類,攔截器可注入其它類,基于這一點,建議能用攔截器的都用攔截器
到此這篇關(guān)于SpringBoot攔截器的使用的文章就介紹到這了,更多相關(guān)SpringBoot攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中的Io(input與output)操作總結(jié)(一)
所謂IO,也就是Input與Output的縮寫。在java中,IO涉及的范圍比較大,這里主要討論針對文件內(nèi)容的讀寫,感興趣的朋友可以了解下2013-01-01
Java中實現(xiàn)文件預(yù)覽的功能(實例代碼)
大家都知道word,Excel,PPT實現(xiàn)在線預(yù)覽常用的方式就是先轉(zhuǎn)換成pdf,然后在進(jìn)行預(yù)覽,下面給大家介紹Java中如何實現(xiàn)文件預(yù)覽的功能,需要的朋友可以參考下2023-05-05
淺談java對象結(jié)構(gòu) 對象頭 Markword
這篇文章主要介紹了淺談java對象結(jié)構(gòu) 對象頭 Markword,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10
@Scheduled fixedDelayString 加載properties配置方式
這篇文章主要介紹了@Scheduled fixedDelayString 加載properties配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

