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

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

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

    176142998

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks
    1 實現權限控制攔截器
    本示例應用要求用戶登陸,且必須為指定用戶名才可以查看系統中某個視圖資源;否則,系統直接轉入登陸頁面。對于上面的需求,可以在每個Action的執行實際處理邏輯之前,先執行權限檢查邏輯,但這種做法不利于代碼復用。因為大部分Action里的權限檢查代碼都大同小異,故將這些權限檢查的邏輯放在攔截器中進行將會更加優雅。

    檢查用戶是否登陸,通常都是通過跟蹤用戶的Session來完成的,通過ActionContext即可訪問到Session中的屬性,攔截器的intercepte(ActionInvocation invocation)方法的invocation參數可以很輕易地訪問到請求相關的ActionContext實例。
    權限檢查攔截器類的代碼如下:
    //權限檢查攔截器繼承AbstractInterceptor類
    public class AuthorityInterceptor extends AbstractInterceptor
    {
    //攔截Action處理的攔截方法
    public String intercept(ActionInvocation invocation) throws Exception
    {
    //取得請求相關的ActionContext實例
    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();
    }
    //沒有登陸,將服務器提示設置成一個HttpServletRequest屬性
    ctx.put("tip" , "您還沒有登陸,請輸入scott,tiger登陸系統");
    //直接返回login的邏輯視圖
    return Action.LOGIN;
    }
    }
    上面攔截器代碼非常簡單,先通過ActionInvocation參數取得用戶的Session實例的引用,然后從中取出user屬性,通過判斷該屬性值來確定用戶是否登陸系統,從而判斷是否需要轉入登陸頁面。

    2 配置權限控制攔截器
    一旦實現了上面的權限檢查攔截器,就可以在所有需要實現權限控制的Action中復用上面的攔截器。
    為了使用該攔截器,首先在struts.xml文件中定義該攔截器,定義攔截器的配置片段如下:
    <!-- 用戶攔截器定義在該元素下 -->
    <interceptors>
    <!-- 定義了一個名為authority的攔截器 -->
    <interceptor name="authority" class="lee.AuthorityInterceptor"/>
    </interceptors>
    定義了該攔截器之后,可以在Action中應用該攔截器,應用該攔截器的配置片段如下:
    <!-- 定義一個名為viewBook的Action,其實現類為ActionSupport -->
    <action name="viewBook">
    <!-- 返回success視圖名時,轉入/WEB-INF/jsp/viewBook.jsp頁面 -->
    <result>/WEB-INF/jsp/viewBook.jsp</result>
    <!-- 攔截器一般配置在result元素之后! -->
    <interceptor-ref name="defaultStack"/>
    <!-- 應用自定義攔截器 -->
    <interceptor-ref name="authority"/>
    </action>

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

    經過上面的配置,如果瀏覽者在瀏覽器中直接發送viewBook請求,將會轉入如圖所示的頁面。
    這種通過攔截器進行權限控制的方式,顯然具有更好的代碼復用。
    如果為了簡化struts.xml文件的配置,避免在每個Action中重復配置該攔截器,可以將該攔截器配置成一個默認攔截器棧(這個默認攔截器棧應該包括default-stack攔截器棧和權限檢查攔截器)。
    定義自己的默認攔截器棧的配置片段如下:
    <interceptors>
    <!-- 定義權限檢查攔截器 -->
    <interceptor name="authority" class="lee.AuthorityInterceptor"/>
    <!-- 定義一個包含權限檢查的攔截器棧 -->
    <interceptor-stack name="mydefault">
    <!-- 定義攔截器棧包含default-stack攔截器棧 -->
    <interceptor-ref name="default-stack"/>
    <!-- 定義攔截器棧包含authority攔截器 -->
    <interceptor-ref name=" authority"/>
    </interceptor- stack >
    </interceptors>

    一旦定義了上面的mydefault攔截器棧,這個攔截器棧包含了權限檢查攔截器和系統默認的攔截器棧。如果將這個攔截器棧定義成默認攔截器,則可以避免在每個Action需要重復定義權限檢查攔截器。
    下面是定義默認攔截器的配置片段:
    <default-interceptor-ref name="mydefault"/>
    一旦在某個包下定義了上面的默認攔截器棧,在該包下的所有Action都會自動增加權限檢查功能。對于那些不需要使用權限控制的Action,將它們定義在另外的包中——這個包中依然使用系統原來的默認攔截器棧,將不會有權限控制功能。
    posted on 2008-08-04 15:06 飛飛 閱讀(1353) 評論(1)  編輯  收藏

    Feedback

    # re: 使用Struts2的攔截器實現權限控制【轉載】 2012-09-28 09:06 djl
    111  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲Av无码专区国产乱码DVD| 国产一区二区三区在线观看免费| 亚洲日韩乱码中文无码蜜桃臀网站| 精品无码专区亚洲| 色吊丝最新永久免费观看网站 | aaa毛片免费观看| 亚洲综合无码AV一区二区 | 亚洲综合激情视频| 黄色网址免费大全| 亚洲精品456人成在线| 麻豆精品国产免费观看| 国产在亚洲线视频观看| 亚洲精品久久久www| 99精品全国免费观看视频..| 亚洲AV日韩AV永久无码绿巨人| 久久99国产乱子伦精品免费| 91亚洲国产成人久久精品| 美女被免费视频网站a国产| 免费国产草莓视频在线观看黄| 亚洲区小说区图片区| 免费人成在线观看视频高潮| 激情内射亚洲一区二区三区| 免费a级毛片高清视频不卡 | 色播在线永久免费视频网站| 亚洲av日韩综合一区在线观看| 亚洲免费二区三区| 免费精品国自产拍在线播放 | 自怕偷自怕亚洲精品| 好男人视频社区精品免费| 日韩在线观看视频免费| 亚洲AV无码精品无码麻豆| 国产va精品免费观看| 免费看黄网站在线看| 久久狠狠高潮亚洲精品| 热99re久久精品精品免费| 爽爽爽爽爽爽爽成人免费观看| 亚洲国产综合在线| 国产成人精品日本亚洲专区 | 日本一道本高清免费| a国产成人免费视频| 在线观看亚洲AV日韩AV|