struts2攔截器及其應(yīng)用

一、struts2簡(jiǎn)介

Struts2是一個(gè)基于MVC設(shè)計(jì)模式的Web應(yīng)用框架,它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。也就是說(shuō),struts2可以實(shí)現(xiàn)代碼的MVC分離,而傳統(tǒng)的servlet在面對(duì)龐大的工程時(shí)解耦不是很好。在團(tuán)隊(duì)協(xié)作里面,struts2的配置文件是聯(lián)系不同模塊之間的關(guān)鍵,方便解耦。

不過(guò),Struts2曾曝出2個(gè)高危安全漏洞,一個(gè)是使用縮寫(xiě)的導(dǎo)航參數(shù)前綴時(shí)的遠(yuǎn)程代碼執(zhí)行漏洞,另一個(gè)是使用縮寫(xiě)的重定向參數(shù)前綴時(shí)的開(kāi)放式重定向漏洞。這些漏洞可使黑客取得網(wǎng)站服務(wù)器的“最高權(quán)限”,從而使企業(yè)服務(wù)器變成黑客手中的“肉雞”。所以有觀點(diǎn)認(rèn)為SpringMVC將逐步吞并struts2,不過(guò)本人沒(méi)有學(xué)習(xí)過(guò)SpringMVC,所以無(wú)法對(duì)以上觀點(diǎn)做出評(píng)判。

二、struts2攔截器介紹

攔截器是面向切面編程的實(shí)例,它將多個(gè)模塊的共同代碼模塊提取出來(lái),靈活地插入各個(gè)模塊之中,減少了系統(tǒng)的重復(fù)代碼,確保業(yè)務(wù)對(duì)象的整潔。

面向切面編程(AOP)舉例:一個(gè)工程當(dāng)中多個(gè)類需要在執(zhí)行之后打印日志信息,“打印日志信息”這一功能并不是某個(gè)特定模塊獨(dú)有的功能,如果在每個(gè)模塊都加入這部分代碼,就會(huì)導(dǎo)致代碼重用性降低,所以就有了面向切面編程編程,將打印日志信息這部分代碼提取出來(lái),靈活的嵌入各個(gè)模塊。

struts2攔截器體現(xiàn)了AOP思想,它可以在指定action的代碼執(zhí)行前后加入攔截器類的代碼,不需要的時(shí)候,只需要在配置文件中刪除攔截器,同時(shí)可以保留攔截器的代碼。

三、攔截器的使用例子

此處使用struts2攔截器實(shí)現(xiàn)登錄驗(yàn)證功能來(lái)介紹攔截器的使用。

功能描述:網(wǎng)站的某部分內(nèi)容在用戶沒(méi)登錄之前是不能訪問(wèn)的,最簡(jiǎn)單的做法就是在每個(gè)展現(xiàn)內(nèi)容的action中加入幾句判斷用戶是否登錄的代碼,但如果涉及的action比較多,開(kāi)發(fā)者就不得不復(fù)制粘貼同樣的代碼到不同的類中,而修改的時(shí)候也需要到各個(gè)類修改,比較麻煩。

struts2攔截器將代碼實(shí)現(xiàn)和AOP的配置分開(kāi)來(lái),配置信息集中在struts2.xml中,比較方便修改。此外代碼只有一份,可以做到一次修改,造福全局。

流程如下(登錄之后才能訪問(wèn)的網(wǎng)頁(yè)放在WEB-INF下):

登錄->action1->驗(yàn)證成功->跳轉(zhuǎn)到頁(yè)面1->點(diǎn)擊某個(gè)按鈕->調(diào)用action2->使用登錄后才能用的頁(yè)面2.

通常action1不用攔截器,因?yàn)楸旧硎堑卿涷?yàn)證部分,而action2則需要,所以需要在“”使用登錄后才能用的頁(yè)面2”前添加攔截器,變?yōu)椋?/p>

登錄->action1->驗(yàn)證成功->跳轉(zhuǎn)到頁(yè)面1->點(diǎn)擊某個(gè)按鈕->調(diào)用action2->攔截器驗(yàn)證當(dāng)前是否登錄->使用登錄后才能用的頁(yè)面2.

代碼:

1、配置web.xml,使用struts2

圖片發(fā)自簡(jiǎn)書(shū)App

2、jsp頁(yè)面

圖片發(fā)自簡(jiǎn)書(shū)App

圖片發(fā)自簡(jiǎn)書(shū)App

圖片發(fā)自簡(jiǎn)書(shū)App


3、編寫(xiě)對(duì)應(yīng)的action

圖片發(fā)自簡(jiǎn)書(shū)App

圖片發(fā)自簡(jiǎn)書(shū)App

4、編寫(xiě)攔截器

圖片發(fā)自簡(jiǎn)書(shū)App

5、配置struts2.xml

圖片發(fā)自簡(jiǎn)書(shū)App

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、struts2工作流程 Struts 2框架本身大致可以分為3個(gè)部分: 核心控制器FilterDispatch...
    重山楊閱讀 1,604評(píng)論 0 38
  • 攔截器是Struts2框架的核心,它主要完成解析請(qǐng)求參數(shù)、將請(qǐng)求參數(shù)賦值給Action屬性、執(zhí)行數(shù)據(jù)校驗(yàn)、文件上傳...
    重山楊閱讀 4,076評(píng)論 2 13
  • 標(biāo)簽 如果要配置的標(biāo)簽,那么必須要先配置標(biāo)簽,代表的包的概念。 包含的屬性 name包的名稱,要求是唯一的,管理a...
    偷偷得路過(guò)閱讀 1,514評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評(píng)論 19 139
  • 你是否還記得我們第一次的相遇? 你是否還記得曾經(jīng)的我們無(wú)話不談? 人與人之間總是充滿著一開(kāi)...
    婷Kitty閱讀 333評(píng)論 0 0

友情鏈接更多精彩內(nèi)容