欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

在spring-boot工程中添加springmvc攔截器

1. 認(rèn)識(shí)攔截器

創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比愛輝網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式愛輝網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋愛輝地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

Spring MVC的攔截器(Interceptor)不是Filter,同樣可以實(shí)現(xiàn)請(qǐng)求的預(yù)處理、后處理。使用攔截器僅需要兩個(gè)步驟:

  • 實(shí)現(xiàn)攔截器
  • 注冊(cè)攔截器

1.1 實(shí)現(xiàn)攔截器

實(shí)現(xiàn)攔截器可以自定義實(shí)現(xiàn)HandlerInterceptor接口,也可以通過繼承HandlerInterceptorAdapter類,后者是前者的實(shí)現(xiàn)類。下面是攔截器的一個(gè)實(shí)現(xiàn)的例子,目的是判斷用戶是否登錄。如果preHandle方法return true,則繼續(xù)后續(xù)處理。

public class LoginInterceptor extends HandlerInterceptorAdapter {
/**
*預(yù)處理回調(diào)方法,實(shí)現(xiàn)處理器的預(yù)處理(如登錄檢查)。
*第三個(gè)參數(shù)為響應(yīng)的處理器,即controller。
*返回true,表示繼續(xù)流程,調(diào)用下一個(gè)攔截器或者處理器。
*返回false,表示流程中斷,通過response產(chǎn)生響應(yīng)。
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
Object handler) throws Exception {
System.out.println("-------------------preHandle");
// 驗(yàn)證用戶是否登陸
Object obj = request.getSession().getAttribute("username");
if (obj == null || !(obj instanceof String)) {
response.sendRedirect(request.getContextPath() + "/index.html");
return false;
}
return true;
}
/**
*當(dāng)前請(qǐng)求進(jìn)行處理之后,也就是Controller 方法調(diào)用之后執(zhí)行,
*但是它會(huì)在DispatcherServlet 進(jìn)行視圖返回渲染之前被調(diào)用。
*此時(shí)我們可以通過modelAndView對(duì)模型數(shù)據(jù)進(jìn)行處理或?qū)σ晥D進(jìn)行處理。
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, 
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("-------------------postHandle");
}
/**
*方法將在整個(gè)請(qǐng)求結(jié)束之后,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行。
*這個(gè)方法的主要作用是用于進(jìn)行資源清理工作的。
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
Object handler, Exception ex) throws Exception {
System.out.println("-------------------afterCompletion");
}
}

1.2 注冊(cè)攔截器

為了使自定義的攔截器生效,需要注冊(cè)攔截器到spring容器中,具體的做法是繼承WebMvcConfigurerAdapter類,覆蓋其addInterceptors(InterceptorRegistry registry)方法。最后別忘了把Bean注冊(cè)到Spring容器中,可以選擇@Component 或者 @Configuration。

@Component
public class InterceptorConfiguration extends WebMvcConfigurerAdapter{
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注冊(cè)攔截器
InterceptorRegistration ir = registry.addInterceptor(new LoginInterceptor());
// 配置攔截的路徑
ir.addPathPatterns("/**");
// 配置不攔截的路徑
ir.excludePathPatterns("/**.html");
// 還可以在這里注冊(cè)其它的攔截器
//registry.addInterceptor(new OtherInterceptor()).addPathPatterns("/**");
}
}

1.3 攔截器的應(yīng)用場(chǎng)景

攔截器本質(zhì)上是面向切面編程(AOP),符合橫切關(guān)注點(diǎn)的功能都可以放在攔截器中來實(shí)現(xiàn),主要的應(yīng)用場(chǎng)景包括:

  1. 登錄驗(yàn)證,判斷用戶是否登錄。
  2. 權(quán)限驗(yàn)證,判斷用戶是否有權(quán)限訪問資源。
  3. 日志記錄,記錄請(qǐng)求日志,以便統(tǒng)計(jì)請(qǐng)求訪問量。
  4. 處理cookie、本地化、國際化、主題等。
  5. 性能監(jiān)控,監(jiān)控請(qǐng)求處理時(shí)長等。

2. 原理

2.1 工作原理

攔截器不是Filter,卻實(shí)現(xiàn)了Filter的功能,其原理在于:

  • 所有的攔截器(Interceptor)和處理器(Handler)都注冊(cè)在HandlerMapping中。
  • Spring MVC中所有的請(qǐng)求都是由DispatcherServlet分發(fā)的。
  • 當(dāng)請(qǐng)求進(jìn)入DispatcherServlet.doDispatch()時(shí)候,首先會(huì)得到處理該請(qǐng)求的Handler(即Controller中對(duì)應(yīng)的方法)以及所有攔截該請(qǐng)求的攔截器。攔截器就是在這里被調(diào)用開始工作的。

2.2 攔截器工作流程

一個(gè)攔截器,只有preHandle方法返回true,postHandle、afterCompletion才有可能被執(zhí)行;如果preHandle方法返回false,則該攔截器的postHandle、afterCompletion必然不會(huì)被執(zhí)行。

假設(shè)我們有兩個(gè)攔截器,例如叫Interceptor1和Interceptor2,當(dāng)一個(gè)請(qǐng)求過來,正常的流程和中斷的流程分別如下。

2.2.1正常流程
注意兩個(gè)攔截器在執(zhí)行preHandle方法和執(zhí)行postHandle、afterCompletion方法時(shí),順序是顛倒的。

  1.  Interceptor1.preHandle
  2. Interceptor2.preHandle
  3.  Controller處理請(qǐng)求
  4. Interceptor2.postHandle
  5. Interceptor1.postHandle
  6. 渲染視圖
  7.  Interceptor2.afterCompletion
  8.  Interceptor1.afterCompletion

2.2.2 中斷流程

假設(shè)執(zhí)行Interceptor2.preHandle中報(bào)錯(cuò),那么流程被中斷,之前被執(zhí)行過的攔截器的afterCompletion仍然會(huì)執(zhí)行。在本例中,即執(zhí)行了Interceptor1.afterCompletion。

1. Interceptor1.preHandle
2. Interceptor2.preHandle
//中間流程被中斷,不再執(zhí)行
3. Interceptor1.afterCompletion

2.3 和Filter共存時(shí)的執(zhí)行順序

攔截器是在DispatcherServlet這個(gè)servlet中執(zhí)行的,因此所有的請(qǐng)求最先進(jìn)入Filter,最后離開Filter。其順序如下。

Filter->Interceptor.preHandle->Handler->Interceptor.postHandle->Interceptor.afterCompletion->Filter

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當(dāng)前標(biāo)題:在spring-boot工程中添加springmvc攔截器
標(biāo)題來源:http://aaarwkj.com/article8/igpoop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、做網(wǎng)站、標(biāo)簽優(yōu)化網(wǎng)站設(shè)計(jì)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
婷婷色悠悠,色悠悠激情啪啪| 国产系列在线播放一区二区三区| 中文字幕免费日本在线| 国产精品久久久久精品综合| 欧美香蕉视频一区二区| 九九有点热以前的视频| 九九热精品在线观看视频| 亚洲精品女同专区视频| 亚洲av日韩高清在线观看| 五月激情开心久久婷婷| 国产一区欧美二区日韩三区| 视频一区二区视频三区 | 欧美精品熟妇乱黑人最大| 亚洲人妻乱人伦中文字幕在线| 精品av一区二区在线| 青青草原在线影视一区| 中文字慕日韩精品欧美一区| 日韩高清av一区二区三区| 日本熟女俱乐部一区二区| 黄色黄色片黄色片黄色| 91美女黑丝免费国产视频| 97免费人妻在线视频| 特色特色欧美黄色影院| 成人黄色三级免费网站| 国产av剧情极品丝袜美女| 亚洲中文字幕精品视频乱码| 青青草免费在线视频视频| 老湿机午夜在线免费观看| 国产日本欧美一区二区三区| 线上免费看黄色亚洲片| 久久免费国产精品电影| 日本黄色免费在线观看网站| 亚洲免费麻豆一区二区三区| 国产模特一区二区三区| 不卡一区二区国产精品| 亚洲国际精品女人乱码| 人妖激情一区二区三区| 一区二区三区四区在线视频观看| 午夜黄色福利在线观看| 亚洲精品伦理视频在线| 午夜看片福利欧美熟女|