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-01Java中實現(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