SpringBoot攔截器的使用
一、攔截器簡(jiǎn)介
攔截器通常通過(guò)動(dòng)態(tài)代理的方式來(lái)執(zhí)行。
攔截器的生命周期由IoC
容器管理,可以通過(guò)注入等方式來(lái)獲取其他Bean
的實(shí)例,使用更方便。
二、攔截器配置使用方式
1、過(guò)濾器攔截器作用范圍
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框架特有的,常用于登錄校驗(yàn),權(quán)限校驗(yàn),請(qǐng)求日志打印 /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 { // 打印請(qǐng)求信息 LOG.info("------------- LogInterceptor 開(kāi)始 -------------"); LOG.info("請(qǐng)求地址: {} {}", 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é)束 耗時(shí):{} 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"); } }
重新編譯啟動(dòng),查看結(jié)果如下:
三、知識(shí)點(diǎn)總結(jié)
1、攔截器的使用
- 返回
true
會(huì)往后執(zhí)行 - 返回
false
會(huì)結(jié)束,可以利用這點(diǎn)來(lái)做權(quán)限攔截 addPathPatterns()
,要攔截請(qǐng)求excludePathPatterns()
,排除請(qǐng)求,不攔截
2、攔截器和過(guò)濾器的相同與不同
- 都可以用來(lái)統(tǒng)一處理請(qǐng)求,比如:打印日志、權(quán)限控制
- 過(guò)濾器依賴于
servlet
容器,攔截器依賴Spring
框架 - 過(guò)濾器不用注入其它類,攔截器可注入其它類,基于這一點(diǎn),建議能用攔截器的都用攔截器
到此這篇關(guān)于SpringBoot
攔截器的使用的文章就介紹到這了,更多相關(guān)SpringBoot
攔截器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中的Io(input與output)操作總結(jié)(一)
所謂IO,也就是Input與Output的縮寫。在java中,IO涉及的范圍比較大,這里主要討論針對(duì)文件內(nèi)容的讀寫,感興趣的朋友可以了解下2013-01-01java如何實(shí)現(xiàn)socket連接方法封裝
這篇文章主要介紹了java實(shí)現(xiàn)socket連接方法封裝教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringBoot 如何實(shí)現(xiàn)異步編程
在SpringBoot的日常開(kāi)發(fā)中,一般都是同步調(diào)用的,但實(shí)際中有很多場(chǎng)景非常適合使用異步來(lái)處理,本文就詳細(xì)的介紹一下SpringBoot 如何實(shí)現(xiàn)異步編程 ,具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12SpringBoot中多環(huán)境啟動(dòng)配置的教程詳解
在SpringBoot項(xiàng)目的生命周期中,存在不同的環(huán)境,我們就需要針對(duì)不同環(huán)境制定不同名稱的配置文件,里面放置不同環(huán)境下所需的配置項(xiàng),下面小編就來(lái)和大家詳細(xì)講講SpringBoot如何進(jìn)行多環(huán)境啟動(dòng)配置的吧2024-02-02Java中實(shí)現(xiàn)文件預(yù)覽的功能(實(shí)例代碼)
大家都知道word,Excel,PPT實(shí)現(xiàn)在線預(yù)覽常用的方式就是先轉(zhuǎn)換成pdf,然后在進(jìn)行預(yù)覽,下面給大家介紹Java中如何實(shí)現(xiàn)文件預(yù)覽的功能,需要的朋友可以參考下2023-05-05淺談java對(duì)象結(jié)構(gòu) 對(duì)象頭 Markword
這篇文章主要介紹了淺談java對(duì)象結(jié)構(gòu) 對(duì)象頭 Markword,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10@Scheduled fixedDelayString 加載properties配置方式
這篇文章主要介紹了@Scheduled fixedDelayString 加載properties配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10