10:SpringBoot項目中一步到位使用攔截器

攔截器對使用SpringMvc、Struts的開發人員來說特別熟悉,因為你只要想去做好一個項目必然會用到它。攔截器在我們平時的項目中用處有很多,如:日誌記錄(我們後續章節會講到)、用戶登錄狀態攔截、安全攔截等等。而SpringBoot內部集成的是SpringMVC控制框架,所以使用起來跟SpringMVC沒有區別,只是在配置上有點不同。廢話不多說,我們開始我們本章的內容!

10:SpringBoot項目中一步到位使用攔截器

本章目標

學習使用SpringBoot中是如何配置攔截器,使用攔截器來完成簡單的用戶登錄狀態判定。

構建項目

我們創建一個名字叫做Chapter的SpringBoot項目,添加如下maven依賴:Web、MySQL、JPA、Druid等。複製之前的配置文件application.yml到本章對應目錄下,具體項目結構如下圖1所示:

10:SpringBoot項目中一步到位使用攔截器

圖1

我們的application.yml文件內容需要修改添加JSP的支持,另外如果你下載後放到你本地的項目時,需要將數據庫的地址以及用戶名,密碼修改成對應自己的配置信息。添加JSP路徑配置支持如下圖2所示:

10:SpringBoot項目中一步到位使用攔截器

圖2

InteiiJ IDEA工具為我們創建的SpringBoot項目是不存在webapp、WEB-INF結構目錄的,我們需要自行添加,如下圖3所示:

10:SpringBoot項目中一步到位使用攔截器

圖3

可以看到上述圖3我們對應的創建了jsp目錄,接下來我們分別創建名字叫做,index.jsp,login.jsp的JSP頁面文件,index.jsp內填寫“你已成功訪問到主頁面!”,login.jsp創建一個登錄表單,輸入一個用戶名、密碼字段,具體內容如下圖4、圖5所示:

10:SpringBoot項目中一步到位使用攔截器

圖4

10:SpringBoot項目中一步到位使用攔截器

圖5

配置控制器

上述JSP文件已經創建完成,下面我們需要讓SpringBoot內置SpringMVC控制器轉發到對應的JSP頁面,我們創建名叫LoginController的類文件,並且加入登錄用戶的方法,如下圖6所示:

10:SpringBoot項目中一步到位使用攔截器

圖6

下面我們配置用戶從數據庫中讀取,因為之前的表沒有“密碼”字段我們下圖在之前的表內添加一個密碼字段如下圖7所示:

10:SpringBoot項目中一步到位使用攔截器

圖7

表結構已經修改,我們根據表結構創建對應的實體,根據實體類直接創建SpringDataJPA的管理接口,SpringDataJPA的具體講解我留到下面的章節給大家好好的梳理梳理,本章先使用最簡單的部分查詢功能。我下面直接貼對應的實體類代碼以及JPA代碼,如下圖8、圖9所示:

10:SpringBoot項目中一步到位使用攔截器

圖8

10:SpringBoot項目中一步到位使用攔截器

圖9

用戶的實體以及JPA配置完成後我們再次打開LoginController,將UserJPA使用SpringBean的形式注入,然後完成簡單的登錄邏輯,如下圖10所示:

10:SpringBoot項目中一步到位使用攔截器

圖10

上圖10可以看到我們使用SpringDataJPA從數據庫中查詢指定用戶,然後再比對密碼是否符合,我再次修改LoginController在登錄成功的地方,添加將用戶寫入session

中。如下圖11所示:

10:SpringBoot項目中一步到位使用攔截器

圖11

到現在我們還沒有編寫有關攔截器的相關內容,上述都是地基,我們接下來開始蓋樓。

創建攔截器

在創建攔截器之前我們需要添加初始化登錄頁面的轉發配置,我們創建IndexController添加初始化登錄、首頁頁面轉發配置,如下圖12所示:

10:SpringBoot項目中一步到位使用攔截器

圖12

完成上述操作後,創建一個名叫做SessionInterceptor的攔截器實體類,實現SpringMVC內部接口HandlerInterceptor,並且添加如果沒有session狀態直接跳轉到/user/login_view地址也就是我們對應的login.jsp頁面,攔截器配置如下圖13所示:

10:SpringBoot項目中一步到位使用攔截器

圖13

接下來我們需要將SessionInterceptor攔截器添加到SpringBoot的配置中,讓SpringBoot項目有這麼一個攔截器存在,我們新創建一個SessionConfiguration,將攔截器的配置以及攔截路徑配置好,如下圖14所示:

10:SpringBoot項目中一步到位使用攔截器

圖14

好了,我們的所有工作都已經做好,下面我們來初嘗試運行項目,看看有沒有什麼問題

初嘗試運行

我們觀察InteiilJ IDEA工具的控制檯的日誌如下圖15所示,證明你的項目啟動沒有問題,那麼我們先來訪問首頁地址嘗試登錄地址:127.0.0.1:8080/user/index,我們發現了一個意向不到的結果,如下圖15所示:

10:SpringBoot項目中一步到位使用攔截器

圖15

為什麼會出現這個問題呢?我們已經排除了/user/login以及/user/login_view請求地址為什麼還會出現這個問題呢?遇到這個問題我們可以去SessionInterceptor內打印request.getRequestURI()看看輸出的地址,如下圖16所示:

10:SpringBoot項目中一步到位使用攔截器

圖16

我們發現不僅僅有/user/login_view,還存在一個/error頁面,為什麼出現這個呢?這時才恍然大悟,我們在pom.xml配置文件中並沒有配置JSP的支持,我們打開pom.xml配置文件將jsp以及servlet的依賴添加進去,如下圖17所示:

10:SpringBoot項目中一步到位使用攔截器

圖17

完成依賴添加後,重啟項目,再次訪問127.0.0.1:8080/user/index,現在顯示是沒有問題了,我們沒有登錄直接訪問index.jsp,當然會被攔截器攔截,攔截後直接跳轉到登錄頁面(login.jsp),如下圖18所示效果:

10:SpringBoot項目中一步到位使用攔截器

圖18

我們現在輸入數據庫內存在的用戶名:admin,密碼:123456的測試用戶進行登錄,效果如下圖19所示:

10:SpringBoot項目中一步到位使用攔截器

圖19

顯示我們已經登錄成功,也就是說我們的登錄用戶消息已經存放到session內,那麼我們來訪問127.0.0.1:8080/user/index地址進行驗證,如下圖20所示:

10:SpringBoot項目中一步到位使用攔截器

圖20

可以看到圖20效果,我們可以訪問到了index.jsp頁面的內容了,我們的攔截器完美的完成的攔截使命。

總結

上述內容是本章的全部講解內容,本章主要內容講解SpringBoot項目是如果配置攔截器,並且實現簡單的用戶登錄狀態驗證攔截實例。


本號已開設如下二十大專題,歡迎關注,查看相關專題!

  • 【springboot專題】【spring源碼】
  • 【mysql優化專題】【HTTP協議】
  • 【架構技術專題】【多線程專題】
  • 【dubbo專題】【dubbo源碼專題】
  • 【JVM調優專題】【HTTP專題】
  • 【設計模式專題】【高併發專題】
  • 【架構技術專題】【Lucene專題】
  • 【數據結構專題】【redis專題】
  • 【mq中間件專題】【netty專題】
  • 【java面試專題】【zookeeper】


分享到:


相關文章: