SpringBoot配置攔截器實現(xiàn)過程詳解_第1頁
SpringBoot配置攔截器實現(xiàn)過程詳解_第2頁
SpringBoot配置攔截器實現(xiàn)過程詳解_第3頁
SpringBoot配置攔截器實現(xiàn)過程詳解_第4頁
SpringBoot配置攔截器實現(xiàn)過程詳解_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第SpringBoot配置攔截器實現(xiàn)過程詳解目錄如何配置攔截器攔截器設(shè)置容易出現(xiàn)的問題如何取消攔截操作實例-登錄驗證

如何配置攔截器

step1:自定義攔截器

/**

*自定義攔截器

publicclassMyInterceptorimplementsHandlerInterceptor{

privatestaticfinalLoggerlogger=LoggerFactory.getLogger(MyInterceptor.class);

*在請求匹配controller之前執(zhí)行,返回true才行進行下一步

*@paramrequest

*@paramresponse

*@paramhandler

*@return

*@throwsException

@Override

publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{

returnfalse;

*已經(jīng)執(zhí)行完controller了,但是還沒有進入視圖渲染

*@paramrequest

*@paramresponse

*@paramhandler

*@parammodelAndView

*@throwsException

@Override

publicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{

*視圖也渲染完了,此時我可以做一些清理工作了

*@paramrequest

*@paramresponse

*@paramhandler

*@paramex

*@throwsException

@Override

publicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{

}

step2:配置攔截器

@Configuration

publicclassMyInterceptorConfigextendsWebMvcConfigurationSupport{

@Override

protectedvoidaddInterceptors(InterceptorRegistryregistry){

registry.addInterceptor(newMyInterceptor()).addPathPatterns("/**");//攔截所有內(nèi)容:/**攔截部分內(nèi)容:/admin/**

super.addInterceptors(registry);

}

攔截器設(shè)置容易出現(xiàn)的問題

靜態(tài)資源被攔截

MyInterceptorConfig繼承WebMvcConfigurationSupport類時,會導(dǎo)致resources/static下的靜態(tài)資源也被攔截,如果我們不想靜態(tài)資源被攔截,可以嘗試以下兩種方法。

/**

*在MyInterceptorConfig中重寫addResourceHandlers方法,重新指定靜態(tài)資源

*推薦在前后端分離時使用,后臺不需要訪問靜態(tài)資源

*@paramregistry

@Override

publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){

registry.addResourceHandler("/**").addResourceLocations(

"classpath:/static/");

super.addResourceHandlers(registry);

/**

*將MyInterceptorConfig類由繼承WebMvcConfigurationSupport改為實現(xiàn)WebMvcConfigurer

*推薦在非前后端分離時使用,后臺需要訪問靜態(tài)資源

@Configuration

publicclassMyInterceptorConfigimplementsWebMvcConfigurer{

@Override

publicvoidaddInterceptors(InterceptorRegistryregistry){

registry.addInterceptor(newMyInterceptor()).addPathPatterns("/**");//攔截所有內(nèi)容:/**攔截部分內(nèi)容:/admin/**

}

如何取消攔截操作

step1:自定義注解

/**

*自定義注解用來指定某個方法不用攔截

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public@interfaceUnInterception{

}

step2:修改攔截器MyInterceptor中的preHandle方法

/**

*在請求匹配controller之前執(zhí)行

*@paramrequest

*@paramresponse

*@paramhandler

*@return

*@throwsException

@Override

publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{

UnInterceptionunInterception=method.getAnnotation(UnInterception.class);

if(null!=unInterception){

("不需要攔截,可以執(zhí)行");

returntrue;

//返回true才會執(zhí)行方法,返回false不會執(zhí)行

returnfalse;

}

step3:在不需要攔截的controller上加上UnInterception注解

@Controller

@RequestMapping("/interceptor")

publicclassInterceptorController{

@UnInterception

@RequestMapping("/test")

publicStringtest(){

return"hello";

}

實例-登錄驗證

用攔截器實現(xiàn)一個登錄驗證功能

step1:自定義攔截器

importcom.kimmel.course13.annotation.UnInterception;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

importorg.springframework.web.method.HandlerMethod;

importorg.springframework.web.servlet.HandlerInterceptor;

importorg.springframework.web.servlet.ModelAndView;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjava.lang.reflect.Method;

*自定義攔截器

publicclassMyInterceptorimplementsHandlerInterceptor{

privatestaticfinalLoggerlogger=LoggerFactory.getLogger(MyInterceptor.class);

*在請求匹配controller之前執(zhí)行

*@paramrequest

*@paramresponse

*@paramhandler

*@return

*@throwsException

@Override

publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{

HandlerMethodhandlerMethod=(HandlerMethod)handler;

Methodmethod=handlerMethod.getMethod();

StringmethodName=method.getName();

//判斷用戶有沒有登錄,一般登錄之后的用戶都有一個對應(yīng)的token

UnInterceptionunInterception=method.getAnnotation(UnInterception.class);

Stringtoken=request.getParameter("token");

if(null==token||"".equals(token)){

("用戶未登錄,沒有權(quán)限執(zhí)行{}請登錄",methodName);

returnfalse;

//返回true才會執(zhí)行方法,返回false不會執(zhí)行

returntrue;

*已經(jīng)執(zhí)行完controller了,但是還沒有進入視圖渲染

*@paramrequest

*@paramresponse

*@paramhandler

*@parammodelAndView

*@throwsException

@Override

publicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{

HandlerMethodhandlerMethod=(HandlerMethod)handler;

Methodmethod=handlerMethod.getMethod();

StringmethodName=method.getName();

("已經(jīng)執(zhí)行完{}了,但是還沒有進入視圖渲染",methodName);

*視圖也渲染完了,此時我可以做一些清理工作了

*@paramrequest

*@paramresponse

*@paramhandler

*@paramex

*@throwsException

@Override

publicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{

("視圖也渲染完了,此時我可以做一些清理工作了");

}

step2:配置攔截器

importcom.kimmel.course13.Interceptor.MyInterceptor;

importorg.springframework.context.annotation.Configuration;

importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;

importorg.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

importorg.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration

publicclassMyInterceptorConfigextendsWebMvcConfigurationSupport{

@Override

protectedvoidaddInterceptors(InterceptorRegistryregistry){

registry.addInterceptor(newMyInterceptor()).addPathPatterns("/**");//攔截所有內(nèi)容:/**攔截部分內(nèi)容:/admin/**

super.addInterceptors(registry);

*發(fā)現(xiàn)如果繼承了WebMvcConfigurationSupport,則在yml中配置的相關(guān)內(nèi)容會失效。需要重新指定靜態(tài)資源

*@paramregistry

@Override

publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){

registry.addResourceHandler

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論