<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    176142998

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks
    1 實(shí)現(xiàn)權(quán)限控制攔截器
    本示例應(yīng)用要求用戶登陸,且必須為指定用戶名才可以查看系統(tǒng)中某個(gè)視圖資源;否則,系統(tǒng)直接轉(zhuǎn)入登陸頁面。對(duì)于上面的需求,可以在每個(gè)Action的執(zhí)行實(shí)際處理邏輯之前,先執(zhí)行權(quán)限檢查邏輯,但這種做法不利于代碼復(fù)用。因?yàn)榇蟛糠諥ction里的權(quán)限檢查代碼都大同小異,故將這些權(quán)限檢查的邏輯放在攔截器中進(jìn)行將會(huì)更加優(yōu)雅。

    檢查用戶是否登陸,通常都是通過跟蹤用戶的Session來完成的,通過ActionContext即可訪問到Session中的屬性,攔截器的intercepte(ActionInvocation invocation)方法的invocation參數(shù)可以很輕易地訪問到請求相關(guān)的ActionContext實(shí)例。
    權(quán)限檢查攔截器類的代碼如下:
    //權(quán)限檢查攔截器繼承AbstractInterceptor類
    public class AuthorityInterceptor extends AbstractInterceptor
    {
    //攔截Action處理的攔截方法
    public String intercept(ActionInvocation invocation) throws Exception
    {
    //取得請求相關(guān)的ActionContext實(shí)例
    ActionContext ctx = invocation.getInvocationContext();
    Map session = ctx.getSession();
    //取出名為user的Session屬性
    String user = (String)session.get("user");
    //如果沒有登陸,或者登陸所用的用戶名不是scott,都返回重新登陸
    if (user != null && user.equals("scott") )
    {
    return invocation.invoke();
    }
    //沒有登陸,將服務(wù)器提示設(shè)置成一個(gè)HttpServletRequest屬性
    ctx.put("tip" , "您還沒有登陸,請輸入scott,tiger登陸系統(tǒng)");
    //直接返回login的邏輯視圖
    return Action.LOGIN;
    }
    }
    上面攔截器代碼非常簡單,先通過ActionInvocation參數(shù)取得用戶的Session實(shí)例的引用,然后從中取出user屬性,通過判斷該屬性值來確定用戶是否登陸系統(tǒng),從而判斷是否需要轉(zhuǎn)入登陸頁面。

    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頁面 -->
    <result>/WEB-INF/jsp/viewBook.jsp</result>
    <!-- 攔截器一般配置在result元素之后! -->
    <interceptor-ref name="defaultStack"/>
    <!-- 應(yīng)用自定義攔截器 -->
    <interceptor-ref name="authority"/>
    </action>

    上面名為viewBook的Action,沒有指定class屬性,默認(rèn)使用ActionSupport類,配置該Action時(shí),只是指定了一個(gè)Result,指定返回success字符串時(shí),系統(tǒng)將轉(zhuǎn)入/WEB-INF/jsp/viewBook.jsp頁面。但并為未配置login視圖對(duì)應(yīng)的JSP頁面。
    考慮到這個(gè)攔截器的重復(fù)使用,可能在多個(gè)Action都需要跳轉(zhuǎn)到login邏輯試圖,故將login Result定義成一個(gè)全局Result。下面是配置login Result的配置片段:
    <!-- 定義全局Result -->
    <global-results>
    <!-- 當(dāng)返回login視圖名時(shí),轉(zhuǎn)入/login.jsp頁面 -->
    <result name="login">/login.jsp</result>
    </global-results>

    經(jīng)過上面的配置,如果瀏覽者在瀏覽器中直接發(fā)送viewBook請求,將會(huì)轉(zhuǎn)入如圖所示的頁面。
    這種通過攔截器進(jìn)行權(quán)限控制的方式,顯然具有更好的代碼復(fù)用。
    如果為了簡化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)原來的默認(rèn)攔截器棧,將不會(huì)有權(quán)限控制功能。
    posted on 2008-08-04 15:06 飛飛 閱讀(1353) 評(píng)論(1)  編輯  收藏

    Feedback

    # re: 使用Struts2的攔截器實(shí)現(xiàn)權(quán)限控制【轉(zhuǎn)載】 2012-09-28 09:06 djl
    111  回復(fù)  更多評(píng)論
      


    只有注冊用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一二三四在线播放免费观看中文版视频 | 久久久久亚洲av成人无码电影| 永久在线免费观看| 成年免费a级毛片免费看无码| 亚洲乱色熟女一区二区三区蜜臀| 亚洲精品高清视频| 国产成人亚洲精品狼色在线| 国产高清在线免费视频| 希望影院高清免费观看视频| 久久精品视频免费看| 国产精品免费久久久久影院| 在线视频亚洲一区| 亚洲无吗在线视频| 亚洲天堂一区二区三区四区| 国产AV无码专区亚洲AV男同| 亚洲成a人在线看天堂无码| 精品国产免费观看| 在线播放高清国语自产拍免费| 91精品国产免费入口| 日本免费在线中文字幕| 中国在线观看免费的www| 九一在线完整视频免费观看| 免费一级毛片在线播放视频免费观看永久| 亚洲男人的天堂网站| 亚洲欧洲日韩极速播放| 亚洲人和日本人jizz| 亚洲乱码卡一卡二卡三| 亚洲中文字幕无码av在线| 亚洲国产精品张柏芝在线观看| 久久综合亚洲色HEZYO社区 | 99在线热播精品免费99热| 国产99久久久久久免费看| 乱爱性全过程免费视频| 一本一道dvd在线观看免费视频 | 一二三四免费观看在线视频中文版 | 九九九精品成人免费视频| 免费毛片a在线观看67194| 麻豆最新国产剧情AV原创免费| 91免费资源网站入口| 四虎成人免费观看在线网址| 日本高清免费aaaaa大片视频|