javascript
Spring Boot 拦截器
(一)攔截器概述
1.1攔截器介紹
攔截器的作用類(lèi)似于Servlet 中的Filter,都可以用于對(duì)處理器進(jìn)行預(yù)處理和后處理。在Spring MVC 與Spring Boot 中使用攔截器一般是實(shí)現(xiàn)HandlerInterceptor 接口。
下面是去掉注釋后的源碼。HandlerInterceptor 接口提供了三個(gè)方法。下面分別對(duì)這三個(gè)方法作具體介紹。
public interface HandlerInterceptor {boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception;void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception;void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception;}1.2攔截器中的三個(gè)方法
preHandle():這個(gè)方法可以實(shí)現(xiàn)處理器的預(yù)處理,也就是它會(huì)在handler 方法執(zhí)行之前就開(kāi)始執(zhí)行。當(dāng)返回值是true 時(shí)表示繼續(xù)執(zhí)行,返回false 時(shí)則不會(huì)執(zhí)行后續(xù)的攔截器或處理器。
作用:身份驗(yàn)證,身份授權(quán)等。
postHandle():這個(gè)方法是后處理回調(diào)方法,也就是在控制器完成后(試圖渲染之前)執(zhí)行。
作用:將公用的模型數(shù)據(jù)傳到視圖,也可以在這里統(tǒng)一指定視圖(菜單導(dǎo)航等)。
afterCompletion():這個(gè)方法是請(qǐng)求處理完畢后的回調(diào)方法,即在視圖渲染完畢時(shí)調(diào)用。
作用:進(jìn)行統(tǒng)一的異常處理,日志處理等。
(二)在Spring Boot 中使用攔截器
2.1使用步驟
2.2簡(jiǎn)單實(shí)現(xiàn)
攔截器MyHandlerInterceptor 類(lèi)
public class MyHandlerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {System.out.println("== preHandle ==");return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {System.out.println("== postHandle ==");}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {System.out.println("== afterCompletion ==");} }注冊(cè)攔截器WebConfiguration 類(lèi)
@SpringBootConfiguration public class WebConfiguration extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/**");} }控制器TestController 類(lèi)
@RestController public class TestController {@GetMapping("/helllo")@ResponseBodypublic String test(){System.out.println("== Controller ==");return "Hello World!";} }PS:在使用攔截器的時(shí)候,要注意讓入口類(lèi)掃描到該攔截器,入口類(lèi)默認(rèn)掃描的包是與入口類(lèi)同級(jí)的包與其子包。
在訪問(wèn)”hello” 時(shí),控制臺(tái)的輸出如下:
參考博文
http://jinnianshilongnian.iteye.com/blog/1670856/
總結(jié)
以上是生活随笔為你收集整理的Spring Boot 拦截器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安徽洁百利跟高美洗地机是什么关系?
- 下一篇: Spring Boot 集成数据库