版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生用品更衣室管理制度
- 衛(wèi)生院行風(fēng)督查制度
- 衛(wèi)生院三病物資管理制度
- 生活區(qū)衛(wèi)生物品管理制度
- 衛(wèi)生院疾病預(yù)防管理制度
- 衛(wèi)生所規(guī)范管理制度
- 養(yǎng)殖場日常衛(wèi)生管理制度
- 幼兒園8項衛(wèi)生管理制度
- 衛(wèi)生所首診負(fù)責(zé)制度
- 衛(wèi)生院新冠病人轉(zhuǎn)診制度
- 箱涵預(yù)制、安裝、現(xiàn)澆施工方案
- 現(xiàn)金日記賬模板(出納版)
- DB34T 1948-2013 建設(shè)工程造價咨詢檔案立卷標(biāo)準(zhǔn)
- 2024中藥藥渣處理協(xié)議
- 心源性暈厥的查房
- 機械氣道廓清技術(shù)臨床應(yīng)用專家共識(2023版)解讀
- 壓力性損傷風(fēng)險評估與管理護理課件
- 專家解析:渲染,烘托等的區(qū)別課件
- 廣州花城匯UUPARK招商手冊
- 20S517 排水管道出水口
- (完整word)長沙胡博士工作室公益發(fā)布新加坡SM2考試物理全真模擬試卷(附答案解析)
評論
0/150
提交評論