亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

spring boot的攔截器簡(jiǎn)單使用示例代碼

 更新時(shí)間:2017年04月24日 14:29:17   作者:牛頭人  
這篇文章主要介紹了spring boot的攔截器簡(jiǎn)單使用實(shí)例代碼,需要的的朋友參考下吧

1.spring boot攔截器默認(rèn)有:

HandlerInterceptorAdapter
AbstractHandlerMapping
UserRoleAuthorizationInterceptor
LocaleChangeInterceptor
ThemeChangeInterceptor 

其中 LocaleChangeInterceptor 和 ThemeChangeInterceptor 比較常用。

2.實(shí)現(xiàn)自定義攔截器只需要3步:

1)、創(chuàng)建我們自己的攔截器類(lèi)并實(shí)現(xiàn) HandlerInterceptor 接口。

2)、創(chuàng)建一個(gè)Java類(lèi)繼承WebMvcConfigurerAdapter,并重寫(xiě) addInterceptors 方法。

3)、實(shí)例化我們自定義的攔截器,然后將對(duì)像手動(dòng)添加到攔截器鏈中(在addInterceptors方法中添加)。

3.代碼示例

IndexInterceptor.java類(lèi)代碼:

package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IndexInterceptor implements HandlerInterceptor{
  @Override
  public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor>>>>>>>在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)");
  }
  @Override
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor>>>>>>>請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)");
  }
  @Override
  public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
     System.out.println(">>>IndexInterceptor>>>>>>>在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前)");
     // 只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dāng)前請(qǐng)求
     return true;
  }
}

IndexInterceptor2.java類(lèi)代碼:

package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class IndexInterceptor2 implements HandlerInterceptor{
  @Override
  public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor2>>>>>>>在整個(gè)請(qǐng)求結(jié)束之后被調(diào)用,也就是在DispatcherServlet 渲染了對(duì)應(yīng)的視圖之后執(zhí)行(主要是用于進(jìn)行資源清理工作)");
  }
  @Override
  public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
      throws Exception {
    System.out.println(">>>IndexInterceptor2>>>>>>>請(qǐng)求處理之后進(jìn)行調(diào)用,但是在視圖被渲染之前(Controller方法調(diào)用之后)");
  }
  @Override
  public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
     System.out.println(">>>IndexInterceptor2>>>>>>>在請(qǐng)求處理之前進(jìn)行調(diào)用(Controller方法調(diào)用之前)");
     // 只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dāng)前請(qǐng)求
     return false;
  }
}

SimpleWebAppConfigurer.java類(lèi)代碼:

package com.example.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.example.interceptor.IndexInterceptor;
import com.example.interceptor.IndexInterceptor2;
//只要能被springboot掃描到即可
@Configuration
public class SimpleWebAppConfigurer extends WebMvcConfigurerAdapter{
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 多個(gè)攔截器組成一個(gè)攔截器鏈
    // addPathPatterns 用于添加攔截規(guī)則
    // excludePathPatterns 用戶(hù)排除攔截
    registry.addInterceptor(new IndexInterceptor()).addPathPatterns("/**");
    registry.addInterceptor(new IndexInterceptor2()).addPathPatterns("/**");
    super.addInterceptors(registry);
  }
}

4.攔截器解析說(shuō)明

preHandle**:預(yù)處理回調(diào)方法,實(shí)現(xiàn)處理器的預(yù)處理(如登錄檢查),第三個(gè)參數(shù)為響應(yīng)的處理器(如我們上一章的Controller實(shí)現(xiàn));

返回值:true表示繼續(xù)流程(如調(diào)用下一個(gè)攔截器或處理器);

false表示流程中斷(如登錄檢查失?。粫?huì)繼續(xù)調(diào)用其他的攔截器或處理器,此時(shí)我們需要通過(guò)response來(lái)產(chǎn)生響應(yīng);

postHandle**:后處理回調(diào)方法,實(shí)現(xiàn)處理器的后處理(但在渲染視圖之前),此時(shí)我們可以通過(guò)modelAndView(模型和視圖對(duì)象)對(duì)模型數(shù)據(jù)進(jìn)行處理或?qū)σ晥D進(jìn)行處理,modelAndView也可能為null。

afterCompletion**:整個(gè)請(qǐng)求處理完畢回調(diào)方法,即在視圖渲染完畢時(shí)回調(diào),如性能監(jiān)控中我們可以在此記錄結(jié)束時(shí)間并輸出消耗時(shí)間,還可以進(jìn)行一些資源清理,類(lèi)似于try-catch-finally中的finally,但僅調(diào)用處理器執(zhí)行鏈中preHandle返回true的攔截器的afterCompletion**。

以上所述是小編給大家介紹的spring boot的攔截器簡(jiǎn)單使用淺析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論