不攔截指定路徑_控制層訪問攔截

在控制層進行訪問攔截也是我們在項目中常會遇到的需求,例如:項目中要求系統登錄操作有時間限制--12306購票時間的限制等.

對于這類需求我們一般有幾種選擇:

  1. 過濾器Filter
  2. AOP
  3. SpringMVC攔截器...

本文我們主要說一下SpringMVC攔截器的實現

原理

Spring MVC的攔截器是基于回調機制,可以在目標方法執行之前/之后,做一些處理.

如下圖所示:

589fa37db34208ed338f285370c7ae79.png

客戶端的請求通過前端控制器會被HandleInterceptor攔截器攔截,會根據攔截器的方法(preHandle/postHandle),分別在Controller層的目標方法之前或之后只寫一些業務.

實現

我們要實現的是登錄前的攔截,然后進行時間判定--所以我們需要用preHandle方法,可以在目標方法執行之前,先進行業務檢測,滿足條件則放行,不滿足條件則進行攔截

具體實現分為兩步:

  1. 定義攔截器:
public class TimeAccessInterceptor implements HandlerInterceptor{    /** 此方法會在你的目標Controller執行之前執行 */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)            throws Exception {        System.out.println("==preHandler==");        LocalDateTime now = LocalDateTime.now();//JDK8的新特性        int hour = now.getHour();        System.out.println("hour:"+hour);        if(hour<9||hour>19)            throw new ServiceException("不在訪問時間:9~14");//return false        return true;//true表示放行,false表示請求到此結束    }}

我們自己創建一個類并且實現HandlerInterceptor攔截器接口,然后根據你的業務需求實現方法,我們這里實現的是preHandle方法用于在controller執行之前執行,通過JDK8的新特性--LocalDateTime.now()來獲取當前時間,可以再通過now.getHoure()等方法來獲取具體的小時/分鐘/秒等.在判斷是否在我們禁止登陸的時間范圍內,如果是則拋出異常(這里ServiceException是我們自己定義的異常類),拋出異常==return false,返回值return true表示放行,false表示攔截結束.

  1. 對攔截器進行配置
@Configurationpublic class SpringWebConfig implements WebMvcConfigurer {    /**     * 注冊攔截器     */    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new TimeAccessInterceptor())        .addPathPatterns("/user/doLogin");    }}

創建一個SpringWebConfig類并且實現WebMvcConfigurer接口,類由@Configuration注解描述,表示是一個配置類,重寫實現類中的addInterceptors方法,參數InterceptorRegistry registry攔截器集合,調用addInterceptor(new TimeAccessInterceptor())向其中添加我們定義的攔截器類,在調用addPathPatterns("/user/doLogin"),添加要攔截的路徑,()內就是我們登陸的路徑.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270716.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電腦知識:Win10系統把系統盤的軟件移到D盤的簡單方法

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

RuntimeException和Exception區別

Exception &#xff1a;受檢查的異常&#xff0c;這種異常是強制我們catch或throw的異常。你遇到這種異常必須進行catch或throw&#xff0c;如果不處理&#xff0c;編譯器會報錯。比如&#xff1a;IOException。 RuntimeException&#xff1a;運行時異常&#xff0c;這種異常我…

語言高精度算法階乘_JavaScript中的算法(附10道面試常見算法題解決方法和思路)...

https://juejin.im/post/6844903811505455118Introduction面試過程通常從最初的電話面試開始&#xff0c;然后是現場面試&#xff0c;檢查編程技能和文化契合度。幾乎毫無例外&#xff0c;最終的決定因素是還是編碼能力。通常上&#xff0c;不僅僅要求能得到正確的答案&#xf…

硬件:LCD和LED相關知識介紹

目錄 一、LCD簡介 二、LED簡介 三、LED和 LCD的區別 四、LED和 LCD顯示器的區別 一、LCD簡介 LCD是液晶顯示屏(Liquid Crystal)Display的全稱&#xff0c;主要有TFT、UFB、TFD、STN等幾種類型的液晶顯示屏無法定位程序輸入點于動態鏈接庫上。 筆記本液晶屏最常用的是TFT。 TFT…

Swagger+AutoRest 生成web api客戶端(.Net)

簡介 對于.net來說&#xff0c;用web api來構建服務是一個不錯的選擇&#xff0c;都是http請求&#xff0c;調用簡單&#xff0c;但是如果真的要在程序中調用&#xff0c;則還有些工作要做&#xff0c;比如我們需要手寫httpClient調用&#xff0c;并映射Model&#xff0c; 如果…

抽象方法和抽象類

抽象方法&#xff1a; 1、從上面的例子中我們可以看到抽象方法跟普通方法是有區別的&#xff0c;它沒有自己的主體&#xff08;沒有{}包起來的 業務邏輯&#xff09;&#xff0c;跟接口中的方法有點類似。所以我們沒法直接調用抽象方法 2、抽象方法不能用private修飾&#xf…

adb logcat 保存_保存的logcat在Android設備上的文本文件

I had found some crashes while running the application in android device, which is not showing in emulator. So i need to save the Logcat in a text file in my devices memory or SD card. Could you please suggest me good method to do this?解決方案adb shell l…

電腦技巧:六款Mac電腦上值得推薦的看圖軟件

??作者主頁&#xff1a;IT技術分享社區 ??作者簡介&#xff1a;大家好,我是IT技術分享社區的博主&#xff0c;從事C#、Java開發九年&#xff0c;對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽&#xff1a; 數據庫領域優質創作者&#x1f3c6;&#x…

C#用Zlib壓縮或解壓縮字節數組

/// <summary>/// 復制流/// </summary>/// <param name"input">原始流</param>/// <param name"output">目標流</param>public static void CopyStream(System.IO.Stream input, System.IO.Stream output){byte[] bu…

Git的smart Checkout\force checkout\Don‘t Checkout的區別

我們在develop分支修改了代碼,但是沒有commit,所以在切換到其他分支的時候回彈出這個窗口. smart checkout就會把沖突的這部分內容帶到目的分支&#xff08;如果你沒有點進窗口的那些文件處理沖突的話&#xff09; force checkout就不會把沖突的這部分內容帶到目的分支 dont ch…

軟件:推薦5款職場人必備的效率神器APP

目錄 1.番茄TO DO&#xff08;支持Android、ios端下載&#xff09; 2.塊時間 &#xff08;支持Android、ios端下載&#xff09; 3.滴答清單&#xff08;支持Android、ios端、PC端下載&#xff09; 4.Eventai&#xff08;僅ios端下載&#xff09; 5.Ihour&#xff08;支持Androi…

python滾動文本框_調整滾動Tkinter文本框的大小

我想要一個滾動的Tkinter文本框來填充最大的分配空間。我有點工作。。。在由于某些原因&#xff0c;當我拉伸窗口時&#xff0c;文本小部件很好&#xff1b;但是&#xff0c;滾動條在x軸上有大量的填充。在第二個問題是當我縮小窗口時&#xff0c;屏幕上的滾動條消失了。在有人…

深入理解 KVC\KVO 實現機制 — KVC

KVC和KVO都屬于鍵值編程而且底層實現機制都是isa-swizzing&#xff0c;所以本來想放在一起講的。但是篇幅有限所以就分成了兩篇博文 KVO實現機制傳送門 KVC概述 KVC是Key Value Coding的簡稱。它是一種可以通過字符串的名字&#xff08;key&#xff09;來訪問類屬性的機制。而不…

python中字典和集合對象是無序的_Python基礎(四):元組、字典和集合

基礎學習第四彈&#xff0c;常用對象&#xff1a;元組、字典和集合一、元組1.1 元組的應用場景思考&#xff1a;如果想要存儲多個數據&#xff0c;但是這些數據是不能修改的數據&#xff0c;怎么做&#xff1f;答&#xff1a;列表&#xff1f;列表可以一次性存儲多個數據&#…

Windows常用必備軟件整理,太全了,值得收藏

目錄 1、Office系列 2、殺毒軟件 3、視頻播放和視頻處理 4、音樂播放 5、壓縮解壓 6、輸入法 7、PDF閱讀軟件 8、文件加密 9、網盤 10、社交聊天 11、日常辦公軟件 ?12、圖片/照片處理? 13、系統自帶的工具 Windows常用必備軟件整理&#xff0c;太全了&#xff0c;值得收藏&…

常見的 Error 和 Exception

如下是常見的 Error 和 Exception&#xff1a; 1&#xff09;運行時異常&#xff08;RuntimeException&#xff09;也稱 【非檢查型異常 UncheckedException】&#xff1a; Nullpointer Exception&#xff1a;空指針異常&#xff1b;ClassCastException&#xff1a;類型強制轉…

Datatable/Dataset 轉 JSON方法

當數據庫表的數據在一般處理程序中查出來需要將這個表數據返回到前臺的jquery中&#xff0c;需要將數據拼成json字符串形式&#xff0c;這里是將數據庫數據查出放在Datatable中&#xff0c;然后在一般處理程序中將datatable轉成json的幾個方法&#xff0c;根據不同的情況調用不…

數據庫:SQLServer數據庫備份方式介紹

今天小編給大家梳理一下數據庫備份的相關知識&#xff0c;希望對大家能有所幫助&#xff01;1、完整備份完整備份相當于針對整個數據庫備份&#xff0c;包含數據庫的全部內容。數據庫完整備份可以將數據庫的所有內容備份為一個.Bak文件。后續可以通過該備份文件在本機或者拷貝到…

注入雙括號報錯注入_SQL手動注入:sqlilabs(less110)

種一棵樹最好的時間是10年前&#xff0c;其次是現在。忘了是誰前言說實話&#xff0c;由于前段時間學 python &#xff0c;對于 OWASP TOP10 漏洞的學習都有所落下&#xff0c;雖然現在也在慢慢復習當中&#xff0c;但是今晚談及的 SQL 注入漏洞手動注入和自動化(sqlmap)注入的…

try、catch、finally用法總結

一、異常的處理&#xff1a;抓拋模型過程一&#xff1a;"拋"&#xff1a;程序在正常執行的過程中&#xff0c;一旦出現異常&#xff0c;就會在異常代碼處生成一個對應異常類的對象。并將此對象拋出。一旦拋出對象以后&#xff0c;其后的代碼就不再執行。關于異常對象…