第六章:如何在SpringBoot項(xiàng)目中使用攔截器

攔截器對(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所示:

圖1

我們的application.yml文件內(nèi)容需要修改添加JSP的支持,另外如果你下載后放到你本地的項(xiàng)目時(shí),需要將數(shù)據(jù)庫(kù)的地址以及用戶名,密碼修改成對(duì)應(yīng)自己的配置信息。添加JSP路徑配置支持如下圖2所示:

圖2

InteiiJ IDEA工具為我們創(chuàng)建的SpringBoot項(xiàng)目是不存在webapp、WEB-INF結(jié)構(gòu)目錄的,我們需要自行添加,如下圖3所示:

圖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所示:

圖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所示:

圖6

下面我們配置用戶從數(shù)據(jù)庫(kù)中讀取,因?yàn)橹暗谋頉](méi)有“密碼”字段我們下圖在之前的表內(nèi)添加一個(gè)密碼字段如下圖7所示:

圖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所示:

圖8


圖9

用戶的實(shí)體以及JPA配置完成后我們?cè)俅未蜷_(kāi)LoginController,將UserJPA使用SpringBean的形式注入,然后完成簡(jiǎn)單的登錄邏輯,如下圖10所示:

圖10

上圖10可以看到我們使用SpringDataJPA從數(shù)據(jù)庫(kù)中查詢指定用戶,然后再比對(duì)密碼是否符合,我再次修改LoginController在登錄成功的地方,添加將用戶寫(xiě)入session中。如下圖11所示:

圖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所示:

圖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所示:

圖13

接下來(lái)我們需要將SessionInterceptor攔截器添加到SpringBoot的配置中,讓SpringBoot項(xiàng)目有這么一個(gè)攔截器存在,我們新創(chuàng)建一個(gè)SessionConfiguration,將攔截器的配置以及攔截路徑配置好,如下圖14所示:

圖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所示:

圖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所示:

圖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所示:

圖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所示效果:

圖18

我們現(xiàn)在輸入數(shù)據(jù)庫(kù)內(nèi)存在的用戶名:admin,密碼:123456的測(cè)試用戶進(jìn)行登錄,效果如下圖19所示:

圖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

可以看到圖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í)星球 - 恒宇少年

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,772評(píng)論 3 422
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,947評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,201評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,960評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,350評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,549評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,104評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,914評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,089評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,340評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,753評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,007評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,834評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,106評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容