當(dāng)前位置:機(jī)電之家首頁 >> 工程造價>> 工程論文 >> 軟件工程論文 >> Struts2框架的權(quán)限控制
Struts2框架的權(quán)限控制

摘  要 Struts2框架改善了Struts框架的弊端,使得Web應(yīng)用開發(fā)的過程更加簡化。本文比較了在Struts框架和Struts2框架中實現(xiàn)權(quán)限控制的方法,分析了各自的適用環(huán)境以及優(yōu)缺點。

關(guān)鍵詞 Struts 權(quán)限控制  攔截器  容器
1、 引言

隨著Web的發(fā)展,Struts作為得到廣泛的應(yīng)用的Web框架顯露出越來越多的弊端,這就促使Struts2的誕生。Struts2是一種全新的MVC框架技術(shù),Struts2是建立在Struts框架與WebWork框架基礎(chǔ)上的。雖然被稱為Struts2框架,但是它與Struts卻有著不同的體系結(jié)構(gòu)。

在下文中,將對Struts2和Struts1.x這兩種框架實現(xiàn)權(quán)限控制的方法進(jìn)行詳細(xì)的比較。

2Struts2技術(shù)

Struts 2 也是一個基于MVC模式的框架??蚣苤凶鳛榭刂破鞯氖?nbsp;FilterDispatcher,它是一個Servlet過濾器。當(dāng)請求來到的時候,首先要經(jīng)過FilterDispatcher過濾,由它來決定由哪個bbbbbb來處理請求。而bbbbbb在Struts 2中是作為模型存在的。視圖方面除了JSP頁面外,Struts 2還可以使用Velocity、FreeMarker、Tiles等多種視圖資源。通過工作流程可以看出Interceptor(攔截器)Struts2中具有重要的作用。攔截器可以用于在某個方法或字段被訪問之前,進(jìn)行攔截然后在之前或之后加入某些操作。而這就為實現(xiàn)權(quán)限控制提供了條件。

3、 權(quán)限控制

3.1基于容器的權(quán)限控制

    TomcatWeb開發(fā)中常用的容器, Struts框架和Struts2框架都可以利用Tomcat容器來實現(xiàn)權(quán)限控制而且相對比較簡單。例如:一個工資管理系統(tǒng),每個員工都可以查看自己的收入情況,但是不能查看其他人的收入情況;部門管理人員可以查看所有員工收入情況;財務(wù)人員可以對收入進(jìn)行修改。

通過配置tomcat-users.xml文件,可以很簡單的對角色進(jìn)行區(qū)分。配置片段如下:

<tomcat-users>

   <role rolename=emplee/>

   <user username=test password=password roles=emplee/>

   <role rolename=manager/>

   <user username=manag password=password roles=manager/>

</tomcat-users>

然后把角色添加到struts-config.xml文件中的bbbbbb標(biāo)簽上的roles屬性中去。該roles屬性表示哪些角色被授權(quán)訪問該動作映射。省略該roles屬性表示非保護(hù)狀態(tài)。代碼如下:

<bbbbbb-mappings>

   <bbbbbb  path=/protected”

           roles=manager

           type=org.apache.struts.bbbbbbs.Forwardbbbbbb

           bbbbbeter=/WEB-INF/protectbbbp/>

   <bbbbbb  path=/unprotected”

           type=org.apache.struts.bbbbbbs.Forwardbbbbbb

           bbbbbeter=/WEB-INF/unprotectbbbp/>

</bbbbbb-mappings>

通過這樣簡單的配置,登陸用戶在訪問系統(tǒng)功能的時候就會被區(qū)別對待,不需要代碼進(jìn)行區(qū)分,而且tomcat-users.xml中的信息也可以由數(shù)據(jù)庫導(dǎo)入。

3.2 Struts中實現(xiàn)權(quán)限控制的方法

多數(shù)Web應(yīng)用要求用戶登陸,才可以查看系統(tǒng)中某資源;否則,系統(tǒng)直接轉(zhuǎn)入登陸頁面。對于這種需求,可以在每個bbbbbb執(zhí)行實際處理邏輯之前,先執(zhí)行權(quán)限檢查邏輯。但這種做法不利于代碼復(fù)用因為大部分bbbbbb里的權(quán)限檢查代碼都大同小異。這時可以考慮利用公共的bbbbbb 實現(xiàn)用戶合法性的校驗。

通過實現(xiàn)一個公共的bbbbbb 并加入相應(yīng)權(quán)限校驗功能,所有需要執(zhí)行權(quán)限校驗的bbbbbb 都可以繼承自此bbbbbb,例如:

public abstract class Verifybbbbbb extends bbbbbb{

public final bbbbbbForward execute(bbbbbbMapping mapping,bbbbbbbbbb bbbb,

HttpServletRequest request,HttpServletResponse response) throws Exception{

HttpSession session=request.getSession();

//如果沒有登陸,則返回重新登陸

bbbbbb user=session.getAttribute("user");

if (user==null) return (mapping.findForward("logon"));

}

}

當(dāng)需要進(jìn)行權(quán)限校驗的bbbbbb 可以繼承以上的bbbbbb,而無須權(quán)限校驗的bbbbbb 則可以繼承自Struts 本身所提供的bbbbbb。繼承的方式可以在一定程度上減少代碼量,代碼的可維護(hù)性也得到提高,但是靈活性較差。當(dāng)需要更新驗證方式的時候,還需要改動很大代碼。

3.3 Struts2中實現(xiàn)權(quán)限控制的方法

采用攔截器就不存在Struts中繼承方式的弊端。Struts2攔截器的實現(xiàn)原理相對簡單,當(dāng)請求struts2bbbbbb時,Struts 2會查找配置文件,并根據(jù)其配置實例化相對的攔截器對象,然后串成一個列表,最后一個一個地調(diào)用列表中的攔截器,而且攔截器是以可插拔的方式來實現(xiàn)的,在攔截器列表中增加或減少一個攔截器不會影響到其他功能的實現(xiàn)。

權(quán)限檢查攔截器繼承AbstractInterceptor類 ,攔截bbbbbb處理的攔截方法的代碼如下:

public bbbbbb intercept(bbbbbbInvocation invocation) throws Exception { 

//取得請求相關(guān)的bbbbbbContext實例 

bbbbbbContext ctx = invocation.getInvocationContext(); 

Map session = ctx.getSession(); 

//取出userSession屬性 

bbbbbb user = (bbbbbb)session.get("user"); 

//如果沒有登陸,返回重新登陸 

if (user != null ) { 

return invocation.invoke(); 

        return bbbbbb.LOGIN;

 } 

這段代碼,先通過bbbbbbInvocation參數(shù)取得用戶的Session實例的引用,然后從中取出user屬性,通過判斷該屬性值來確定用戶是否登陸系統(tǒng),從而判斷是否需要轉(zhuǎn)入登陸頁面。 

一旦實現(xiàn)了權(quán)限檢查攔截器,就可以在所有需要實現(xiàn)權(quán)限控制的bbbbbb中復(fù)用上面的攔截器。 為了使用該攔截器,首先在struts.xml文件中定義該攔截器,定義攔截器的配置片段如下: 

<interceptors>

<interceptor name="authority" class="test.wyt.AuthorityInterceptor"/>

</interceptors>

定義了該攔截器之后,可以在bbbbbb中應(yīng)用該攔截器。這種通過攔截器進(jìn)行權(quán)限控制的方式,顯然具有更好的代碼復(fù)用。為了避免在每個bbbbbb中重復(fù)配置該攔截器,可以將該攔截器配置成一個默認(rèn)攔截器棧。一旦在某個包下定義了默認(rèn)攔截器棧,在該包下的所有bbbbbb都會自動增加權(quán)限檢查功能。

4、 結(jié)束語

Struts應(yīng)用框架,已經(jīng)廣泛地運用于企業(yè)平臺中,而Struts2應(yīng)用框架在提高系統(tǒng)開發(fā)效率,增加代碼復(fù)用效率,增強(qiáng)系統(tǒng)可維護(hù)性,縮短系統(tǒng)開發(fā)時間這些方面更為優(yōu)秀。本文所提到的權(quán)限控制方法中,通過bbbbbb實現(xiàn)權(quán)限控制易于實現(xiàn)但不利于系統(tǒng)維護(hù)更新,基于容器的權(quán)限控制方法簡單但不適合用戶變化頻繁的應(yīng)用系統(tǒng),而使用攔截器實

作者:未知 點擊:3179次 [打印] [關(guān)閉] [返回頂部]
本文標(biāo)簽:Struts2框架的權(quán)限控制
* 由于無法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《Struts2框架的權(quán)限控制》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。
關(guān)于“Struts2框架的權(quán)限控制”的更多資訊

電子樣本

SN系列樣冊
:鞏經(jīng)理
:13915946763
:南京塞姆泵業(yè)有限公司
個人求購

吳小姐 【求購】  粉碎機(jī)  2025-12-5
 【求購】  冶煉用的重...  2025-12-5
柳女士 【求購】  斷路器  2025-12-5
林志揚 【求購】  無石棉墊片  2025-12-4
張一帆 【求購】  首件測試儀  2025-12-4
王飛 【求購】  gf流量計  2025-12-4
 【求購】  全自動印刷...  2025-12-4
 【求購】  LED屏  2025-12-3
VIP公司推薦