攔截器對(duì)使用SpringMvc、Struts的開(kāi)發(fā)人員來(lái)說(shuō)特別熟悉,因?yàn)槟阒灰肴プ龊靡粋€(gè)項(xiàng)目必然會(huì)用到它。攔截器在我們平時(shí)的項(xiàng)目中用處有很多,如:日志記錄(我們后續(xù)章節(jié)會(huì)講到)、用戶登錄狀態(tài)攔截、安全攔截等等。而SpringBoot內(nèi)部集成的是SpringMVC控制框架,所以使用起來(lái)跟SpringMVC沒(méi)有區(qū)別,只是在配置上有點(diǎn)不同。廢話不多說(shuō),我們開(kāi)始我們本章的內(nèi)容!
免費(fèi)專(zhuān)題文章匯總
恒宇少年在博客整理出來(lái)了SpringBoot、ApiBoot、SpringCloud的文章匯總【SpringBoot基礎(chǔ)教程專(zhuān)題】,【SpringCloud基礎(chǔ)教程專(zhuān)題】,【ApiBoot組件使用專(zhuān)題】
本章目標(biāo)
學(xué)習(xí)使用SpringBoot中是如何配置攔截器,使用攔截器來(lái)完成簡(jiǎn)單的用戶登錄狀態(tài)判定。
構(gòu)建項(xiàng)目
我們創(chuàng)建一個(gè)名字叫做Chapter6的SpringBoot項(xiàng)目,添加如下maven依賴(lài):Web、MySQL、JPA、Druid等。復(fù)制上一章配置文件application.yml到本章對(duì)應(yīng)目錄下,具體項(xiàng)目結(jié)構(gòu)如下圖1所示:
我們的application.yml文件內(nèi)容需要修改添加JSP的支持,另外如果你下載后放到你本地的項(xiàng)目時(shí),需要將數(shù)據(jù)庫(kù)的地址以及用戶名,密碼修改成對(duì)應(yīng)自己的配置信息。添加JSP路徑配置支持如下圖2所示:
InteiiJ IDEA工具為我們創(chuàng)建的SpringBoot項(xiàng)目是不存在webapp、WEB-INF結(jié)構(gòu)目錄的,我們需要自行添加,如下圖3所示:
可以看到上述圖3我們對(duì)應(yīng)的創(chuàng)建了jsp目錄,接下來(lái)我們分別創(chuàng)建名字叫做,index.jsp,login.jsp的JSP頁(yè)面文件,index.jsp內(nèi)填寫(xiě)“你已成功訪問(wèn)到主頁(yè)面!”,login.jsp創(chuàng)建一個(gè)登錄表單,輸入一個(gè)用戶名、密碼字段,具體內(nèi)容如下圖4、圖5所示:
配置控制器
上述JSP文件已經(jīng)創(chuàng)建完成,下面我們需要讓SpringBoot內(nèi)置SpringMVC控制器轉(zhuǎn)發(fā)到對(duì)應(yīng)的JSP頁(yè)面,我們創(chuàng)建名叫LoginController的類(lèi)文件,并且加入登錄用戶的方法,如下圖6所示:
下面我們配置用戶從數(shù)據(jù)庫(kù)中讀取,因?yàn)橹暗谋頉](méi)有“密碼”字段我們下圖在之前的表內(nèi)添加一個(gè)密碼字段如下圖7所示:
表結(jié)構(gòu)已經(jīng)修改,我們根據(jù)表結(jié)構(gòu)創(chuàng)建對(duì)應(yīng)的實(shí)體,根據(jù)實(shí)體類(lèi)直接創(chuàng)建SpringDataJPA的管理接口,SpringDataJPA的具體講解我留到下面的章節(jié)給大家好好的梳理梳理,本章先使用最簡(jiǎn)單的部分查詢功能。我下面直接貼對(duì)應(yīng)的實(shí)體類(lèi)代碼以及JPA代碼,如下圖8、圖9所示:
用戶的實(shí)體以及JPA配置完成后我們?cè)俅未蜷_(kāi)LoginController,將UserJPA使用SpringBean的形式注入,然后完成簡(jiǎn)單的登錄邏輯,如下圖10所示:
上圖10可以看到我們使用SpringDataJPA從數(shù)據(jù)庫(kù)中查詢指定用戶,然后再比對(duì)密碼是否符合,我再次修改LoginController在登錄成功的地方,添加將用戶寫(xiě)入session中。如下圖11所示:
到現(xiàn)在我們還沒(méi)有編寫(xiě)有關(guān)攔截器的相關(guān)內(nèi)容,上述都是地基,我們接下來(lái)開(kāi)始蓋樓。
創(chuàng)建攔截器
在創(chuàng)建攔截器之前我們需要添加初始化登錄頁(yè)面的轉(zhuǎn)發(fā)配置,我們創(chuàng)建IndexController添加初始化登錄、首頁(yè)頁(yè)面轉(zhuǎn)發(fā)配置,如下圖12所示:
完成上述操作后,創(chuàng)建一個(gè)名叫做SessionInterceptor的攔截器實(shí)體類(lèi),實(shí)現(xiàn)SpringMVC內(nèi)部接口HandlerInterceptor,并且添加如果沒(méi)有session狀態(tài)直接跳轉(zhuǎn)到/user/login_view地址也就是我們對(duì)應(yīng)的login.jsp頁(yè)面,攔截器配置如下圖13所示:
接下來(lái)我們需要將SessionInterceptor攔截器添加到SpringBoot的配置中,讓SpringBoot項(xiàng)目有這么一個(gè)攔截器存在,我們新創(chuàng)建一個(gè)SessionConfiguration,將攔截器的配置以及攔截路徑配置好,如下圖14所示:
好了,我們的所有工作都已經(jīng)做好,下面我們來(lái)初嘗試運(yùn)行項(xiàng)目,看看有沒(méi)有什么問(wèn)題
初嘗試運(yùn)行
我們觀察InteiilJ IDEA工具的控制臺(tái)的日志如下圖15所示,證明你的項(xiàng)目啟動(dòng)沒(méi)有問(wèn)題,那么我們先來(lái)訪問(wèn)首頁(yè)地址嘗試登錄地址:127.0.0.1:8080/user/index,我們發(fā)現(xiàn)了一個(gè)意向不到的結(jié)果,如下圖15所示:
為什么會(huì)出現(xiàn)這個(gè)問(wèn)題呢?我們已經(jīng)排除了/user/login以及/user/login_view請(qǐng)求地址為什么還會(huì)出現(xiàn)這個(gè)問(wèn)題呢?遇到這個(gè)問(wèn)題我們可以去SessionInterceptor內(nèi)打印request.getRequestURI()看看輸出的地址,如下圖16所示:
我們發(fā)現(xiàn)不僅僅有/user/login_view,還存在一個(gè)/error頁(yè)面,為什么出現(xiàn)這個(gè)呢?這時(shí)才恍然大悟,我們?cè)趐om.xml配置文件中并沒(méi)有配置JSP的支持,我們打開(kāi)pom.xml配置文件將jsp以及servlet的依賴(lài)添加進(jìn)去,如下圖17所示:
完成依賴(lài)添加后,重啟項(xiàng)目,再次訪問(wèn)127.0.0.1:8080/user/index,現(xiàn)在顯示是沒(méi)有問(wèn)題了,我們沒(méi)有登錄直接訪問(wèn)index.jsp,當(dāng)然會(huì)被攔截器攔截,攔截后直接跳轉(zhuǎn)到登錄頁(yè)面(login.jsp),如下圖18所示效果:
我們現(xiàn)在輸入數(shù)據(jù)庫(kù)內(nèi)存在的用戶名:admin,密碼:123456的測(cè)試用戶進(jìn)行登錄,效果如下圖19所示:
顯示我們已經(jīng)登錄成功,也就是說(shuō)我們的登錄用戶消息已經(jīng)存放到session內(nèi),那么我們來(lái)訪問(wèn)127.0.0.1:8080/user/index地址進(jìn)行驗(yàn)證,如下圖20所示:
可以看到圖20效果,我們可以訪問(wèn)到了index.jsp頁(yè)面的內(nèi)容了,我們的攔截器完美的完成的攔截使命。
總結(jié)
上述內(nèi)容是本章的全部講解內(nèi)容,本章主要內(nèi)容講解SpringBoot項(xiàng)目是如果配置攔截器,并且實(shí)現(xiàn)簡(jiǎn)單的用戶登錄狀態(tài)驗(yàn)證攔截實(shí)例。
本章代碼已經(jīng)上傳到碼云:
SpringBoot配套源碼地址:https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址:https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄
QueryDSL相關(guān)系列文章請(qǐng)?jiān)L問(wèn):QueryDSL通用查詢框架學(xué)習(xí)目錄
SpringDataJPA相關(guān)系列文章請(qǐng)?jiān)L問(wèn):目錄:SpringDataJPA學(xué)習(xí)目錄
SpringBoot相關(guān)文章請(qǐng)?jiān)L問(wèn):目錄:SpringBoot學(xué)習(xí)目錄,感謝閱讀!
歡迎微信掃碼加入知識(shí)星球,恒宇少年帶你走以后的技術(shù)道路!!!
知識(shí)星球 - 恒宇少年