国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Struts2 攔截器實(shí)現(xiàn)權(quán)限控制
使用Struts2的攔截器實(shí)現(xiàn)權(quán)限控制【轉(zhuǎn)載】
2008-12-22 11:14
這段時(shí)間在學(xué)習(xí)一本新書——《struts2權(quán)威指南》(李剛著),現(xiàn)在看到“使用攔截器完成權(quán)限控制”,就仿照著做了一個(gè)例子,以鞏固知識(shí)。如下:
1 實(shí)現(xiàn)權(quán)限控制攔截器
本示例應(yīng)用要求用戶登陸,且必須為指定用戶名才可以查看系統(tǒng)中某個(gè)視圖資源;否則,系統(tǒng)直接轉(zhuǎn)入登陸頁(yè)面。對(duì)于上面的需求,可以在每個(gè)Action的執(zhí)行實(shí)際處理邏輯之前,先執(zhí)行權(quán)限檢查邏輯,但這種做法不利于代碼復(fù)用。因?yàn)榇蟛糠諥ction里的權(quán)限檢查代碼都大同小異,故將這些權(quán)限檢查的邏輯放在攔截器中進(jìn)行將會(huì)更加優(yōu)雅。
檢查用戶是否登陸,通常都是通過(guò)跟蹤用戶的Session來(lái)完成的,通過(guò)ActionContext即可訪問(wèn)到Session中的屬性,攔截器的intercepte(ActionInvocation invocation)方法的invocation參數(shù)可以很輕易地訪問(wèn)到請(qǐng)求相關(guān)的ActionContext實(shí)例。
權(quán)限檢查攔截器類的代碼如下:
//權(quán)限檢查攔截器繼承AbstractInterceptor類
public class AuthorityInterceptor extends AbstractInterceptor
{
//攔截Action處理的攔截方法
public String intercept(ActionInvocation invocation) throws Exception
{
//取得請(qǐng)求相關(guān)的ActionContext實(shí)例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//取出名為user的Session屬性
String user = (String)session.get("user");
//如果沒(méi)有登陸,或者登陸所用的用戶名不是scott,都返回重新登陸
if (user != null && user.equals("scott") )
{
return invocation.invoke();
}
//沒(méi)有登陸,將服務(wù)器提示設(shè)置成一個(gè)HttpServletRequest屬性
ctx.put("tip" , "您還沒(méi)有登陸,請(qǐng)輸入scott,tiger登陸系統(tǒng)");
//直接返回login的邏輯視圖
return Action.LOGIN;
}
}
上面攔截器代碼非常簡(jiǎn)單,先通過(guò)ActionInvocation參數(shù)取得用戶的Session實(shí)例的引用,然后從中取出user屬性,通過(guò)判斷該屬性值來(lái)確定用戶是否登陸系統(tǒng),從而判斷是否需要轉(zhuǎn)入登陸頁(yè)面。
2 配置權(quán)限控制攔截器
一旦實(shí)現(xiàn)了上面的權(quán)限檢查攔截器,就可以在所有需要實(shí)現(xiàn)權(quán)限控制的Action中復(fù)用上面的攔截器。
為了使用該攔截器,首先在struts.xml文件中定義該攔截器,定義攔截器的配置片段如下:
<!-- 用戶攔截器定義在該元素下 -->
<interceptors>
<!-- 定義了一個(gè)名為authority的攔截器 -->
<interceptor name="authority" class="lee.AuthorityInterceptor"/>
</interceptors>
定義了該攔截器之后,可以在Action中應(yīng)用該攔截器,應(yīng)用該攔截器的配置片段如下:
<!-- 定義一個(gè)名為viewBook的Action,其實(shí)現(xiàn)類為ActionSupport -->
<action name="viewBook">
<!-- 返回success視圖名時(shí),轉(zhuǎn)入/WEB-INF/jsp/viewBook.jsp頁(yè)面 -->
<result>/WEB-INF/jsp/viewBook.jsp</result>
<!-- 攔截器一般配置在result元素之后! -->
<interceptor-ref name="defaultStack"/>
<!-- 應(yīng)用自定義攔截器 -->
<interceptor-ref name="authority"/>
</action>
上面名為viewBook的Action,沒(méi)有指定class屬性,默認(rèn)使用ActionSupport類,配置該Action時(shí),只是指定了一個(gè)Result,指定返回success字符串時(shí),系統(tǒng)將轉(zhuǎn)入/WEB-INF/jsp/viewBook.jsp頁(yè)面。但并為未配置login視圖對(duì)應(yīng)的JSP頁(yè)面。
考慮到這個(gè)攔截器的重復(fù)使用,可能在多個(gè)Action都需要跳轉(zhuǎn)到login邏輯試圖,故將login Result定義成一個(gè)全局Result。下面是配置login Result的配置片段:
<!-- 定義全局Result -->
<global-results>
<!-- 當(dāng)返回login視圖名時(shí),轉(zhuǎn)入/login.jsp頁(yè)面 -->
<result name="login">/login.jsp</result>
</global-results>
經(jīng)過(guò)上面的配置,如果瀏覽者在瀏覽器中直接發(fā)送viewBook請(qǐng)求,將會(huì)轉(zhuǎn)入如圖所示的頁(yè)面。
這種通過(guò)攔截器進(jìn)行權(quán)限控制的方式,顯然具有更好的代碼復(fù)用。
如果為了簡(jiǎn)化struts.xml文件的配置,避免在每個(gè)Action中重復(fù)配置該攔截器,可以將該攔截器配置成一個(gè)默認(rèn)攔截器棧(這個(gè)默認(rèn)攔截器棧應(yīng)該包括default-stack攔截器棧和權(quán)限檢查攔截器)。
定義自己的默認(rèn)攔截器棧的配置片段如下:
<interceptors>
<!-- 定義權(quán)限檢查攔截器 -->
<interceptor name="authority" class="lee.AuthorityInterceptor"/>
<!-- 定義一個(gè)包含權(quán)限檢查的攔截器棧 -->
<interceptor-stack name="mydefault">
<!-- 定義攔截器棧包含default-stack攔截器棧 -->
<interceptor-ref name="default-stack"/>
<!-- 定義攔截器棧包含authority攔截器 -->
<interceptor-ref name=" authority"/>
</interceptor- stack >
</interceptors>
一旦定義了上面的mydefault攔截器棧,這個(gè)攔截器棧包含了權(quán)限檢查攔截器和系統(tǒng)默認(rèn)的攔截器棧。如果將這個(gè)攔截器棧定義成默認(rèn)攔截器,則可以避免在每個(gè)Action需要重復(fù)定義權(quán)限檢查攔截器。
下面是定義默認(rèn)攔截器的配置片段:
<default-interceptor-ref name="mydefault"/>
一旦在某個(gè)包下定義了上面的默認(rèn)攔截器棧,在該包下的所有Action都會(huì)自動(dòng)增加權(quán)限檢查功能。對(duì)于那些不需要使用權(quán)限控制的Action,將它們定義在另外的包中——這個(gè)包中依然使用系統(tǒng)原來(lái)的默認(rèn)攔截器棧,將不會(huì)有權(quán)限控制功能。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
struts2學(xué)習(xí)筆記(9)——自定義攔截器
Struts 2的基石——攔截器(Interceptor)
struts2的小知識(shí)
struts2.x中的攔截器
防止未登錄用戶操作
Struts2 權(quán)限驗(yàn)證
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服