日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门

發布時間:2025/3/15 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總體步驟

1.自定義一個實現HandlerInterceptor 接口的類比如SignUpHandlerInterceptor(我這邊以注冊登錄攔截器為例)。

package com.example.project.config;import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class SignUpHandlerInterceptor implements HandlerInterceptor {/*** 預處理回調方法,實現處理器的預處理(如檢查登陸),第三個參數為響應的處理器,自定義Controller* 返回值:true表示繼續流程(如調用下一個攔截器或處理器);false表示流程中斷(如登錄檢查失敗),不會繼續調用其他的攔截器或處理器,此時我們需要通過response來產生響應;*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//若注冊成功可以獲取sessionObject signUpUser = request.getSession().getAttribute("signUpUser");if(signUpUser==null){request.setAttribute("msg","沒有權限,請先注冊賬號");request.getRequestDispatcher("/signup").forward(request,response);return false;}else{return true;}}/*** 后處理回調方法,實現處理器的后處理(但在渲染視圖之前),此時我們可以通過modelAndView(模型和視圖對象)對模型數據進行處理或對視圖進行處理,modelAndView也可能為null。*/ // @Override // public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); // } // // /** // * 整個請求處理完畢回調方法,即在視圖渲染完畢時回調,如性能監控中我們可以在此記錄結束時間并輸出消耗時間,還可以進行一些資源清理,類似于try-catch-finally中的finally,但僅調用處理器執行鏈中 // */ // @Override // public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // HandlerInterceptor.super.afterCompletion(request, response, handler, ex); // } }

2.我這邊是對注冊的攔截器,所以我需要設置session

package com.example.project.controller;import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.thymeleaf.util.StringUtils;import javax.servlet.http.HttpSession;@Controller public class SignUpController {@RequestMapping({"/user/signup"})public String signUp(@RequestParam("signup_name") String signup_name,@RequestParam("signup_email")String signup_email,@RequestParam("signup_password")String signup_password,Model model,HttpSession session){//通過model返回數據,通過RequestParam接收數據//業務//測試System.out.println("###=>"+signup_name);System.out.println("###=>"+signup_email);System.out.println("###=>"+signup_password);//姓名郵箱不為空并且密碼為123456if(!StringUtils.isEmpty(signup_name)&&!StringUtils.isEmpty(signup_email)&&"123456".equals(signup_password)){//注冊成功就設置session//x.setAttribute(name,value)把x的name的值設置為valuesession.setAttribute("signUpUser",signup_email);return "index";}else{//反饋失敗信息model.addAttribute("msg","您的輸入有誤,請重試");return "signup";}// return "signup";} }

3.重寫addInterceptor方法,添加自定義的攔截器并設置需要攔截的頁面和不需要攔截的頁面。

package com.example.project.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration public class MyMvcConfiguration implements WebMvcConfigurer {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("signup");registry.addViewController("/signup.html").setViewName("signup");registry.addViewController("/signup").setViewName("signup");}//自定義國際化組件@Beanpublic LocaleResolver localeResolver(){return new MyLocaleResolver();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new SignUpHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/signup","/","/user/signup","/login","/login.html");} }

HandlerInterceptor 接口的三個方法

/*** 預處理回調實現處理器的預處理(如檢查登陸),第三個參數為響應的處理器,自定義Controller* 返回值:true表示繼續流程(如調用下一個攔截器或處理器);false表示流程中斷(如登錄檢查失敗),不會繼續調用其他的攔截器或處理器,此時我們需要通過response來產生響應;* 這個方法將在請求處理之前進行調用。 「注意」:如果該方法的返回值為false ,將視為當前請求結束,不僅自身的攔截器會失效,還會導致其他的攔截器也不再執行。*/ @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return HandlerInterceptor.super.preHandle(request, response, handler);}/*** 后處理回調實現處理器的后處理(但在渲染視圖之前),modelAndView(模型和視圖對象)對模型數據進行處理或對視圖進行處理,modelAndView也可能為null。* 只有在 preHandle 方法返回值為true 時才會執行。會在Controller 中的方法調用之后,DispatcherServlet 返回渲染視圖之前被調用。* postHandle 方法被調用的順序跟 preHandle 是相反的,先聲明的攔截器 preHandle 方法先執行,而postHandle方法反而會后執行。*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}/**只有在 preHandle 方法返回值為true 時才會執行。在整個請求結束之后, DispatcherServlet 渲染了對應的視圖之后執行。* 整個請求處理完畢回調,即在視圖渲染完畢時回調,如性能監控中我們可以在此記錄結束時間并輸出消耗時間.* 還可以進行一些資源清理或釋放資源,類似于try-catch-finally中的finally,但僅調用處理器執行鏈中*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}

一般的處理順序為:preHandler -> Controller -> postHandler -> model渲染-> afterCompletion

攔截器攔截頁面設置

在自定義的Configuration配置文件中設置攔截的頁面
addPathPatterns設置進入攔截器的頁面
excludePathPatterns設置除外的不需攔截的頁面(比如注冊和登錄)
當需要攔截的內容多的時候可以用:

registry.addInterceptor(new XXXXHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/signup","/","/user/signup","/login");

/**表示所有路徑
excludePathPatterns把除外的可以隨意訪問的路徑放入
完整的MyMvcConfiguration代碼:

@Configuration public class MyMvcConfiguration implements WebMvcConfigurer {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("signup");registry.addViewController("/signup.html").setViewName("signup");registry.addViewController("/signup").setViewName("signup");}//自定義國際化組件@Beanpublic LocaleResolver localeResolver(){return new MyLocaleResolver();}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new SignUpHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/signup","/","/user/signup","/login");} } 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人国产一区二区三区精品麻豆 | 国产一区二区视频播放 | 色999在线观看 | 精品国产麻豆 | 日韩av女优在线观看 | 污污内射久久一区二区欧美日韩 | 国产一区二区三区麻豆 | 亚洲精品传媒 | 亚洲精品成a人在线观看 | 中文字幕一区二区在线观看 | www日本xxx | 天天综合网在线 | 性开放视频 | 欧美日韩高清丝袜 | 性欧美xxxx | 国产精品一区在线免费观看 | 人人做人人爱人人爽 | 二区三区偷拍浴室洗澡视频 | 欧美一区二区三区爱爱 | 伊人二区 | 久久久五月天 | 欧洲性猛交 | 国产欧美日韩三区 | 免费h片在线观看 | jizz性欧美2| 久久精品视频网站 | 天天综合天天做天天综合 | 在线看片你懂 | 欧美三p| 国产精品久久久久91 | 免费看片网站91 | 色狠狠一区二区三区 | 羞羞的网站在线观看 | 波多野结衣大片 | 国产特黄一级片 | 激情第四色 | 一二三区在线观看 | 丨国产丨调教丨91丨 | 日韩一区二区三区在线观看视频 | 亚洲h动漫 | 国产高清第一页 | 久久久精品国产免费爽爽爽 | 国产高清片 | 欧美国产综合 | 不卡影院 | 国产69精品久久 | 午夜天堂精品久久久久 | 欧美成人午夜视频 | 欧美在线观看一区 | 99只有精品| 国产精品国产三级国产播12软件 | 久久噜噜噜精品国产亚洲综合 | 欧美一级性 | 国产在线高清视频 | 催眠调教后宫乱淫校园 | 天天拍天天色 | 熟女av一区二区 | 喷水了…太爽了高h | 久久精品人妻一区二区三区 | 国产喷水福利在线视频 | 99综合久久 | 黄色片高清 | 午夜啪啪福利视频 | 中文字幕一区二区精品 | 一级片免费在线 | 亚洲精品久久久久久久蜜桃臀 | 久久国产香蕉视频 | 亚洲一级特黄 | 一级片在线观看免费 | 久操视频网站 | 黄色片免费在线观看 | 在线视频欧美日韩 | 先锋av在线资源 | 久久久久久久久久久久久国产 | 麻豆自拍视频 | 日韩色道 | av成人在线看 | 色精品视频 | 日本美女日批视频 | 操操久久| 国产欧美久久久久 | 久久精品97 | 聚色av | 国产一区欧美二区 | 最新最近中文字幕 | 爱爱中文字幕 | 久久久青 | 免费污片软件 | 欧美日韩一区免费 | 日韩一级伦理片 | 超碰在线最新 | 欧美一区二区在线播放 | 相亲对象是问题学生动漫免费观看 | 亚洲欧洲精品成人久久奇米网 | 亚洲性视频网站 | 免费视频99 | 最近高清中文在线字幕在线观看 | 色撸撸av| 自拍偷拍视频网站 |