Struts2許可權控制

2021-08-31 22:41:57 字數 1728 閱讀 6824

1 實現許可權控制***

本示例應用要求使用者登陸,且必須為指定使用者名稱才可以檢視系統中某個檢視資源;否則,系統直接轉入登陸頁面。對於上面的需求,可以在每個action的執行實際處理邏輯之前,先執行許可權檢查邏輯,但這種做法不利於**復用。因為大部分action裡的許可權檢查**都大同小異,故將這些許可權檢查的邏輯放在***中進行將會更加優雅。

檢查使用者是否登陸,通常都是通過跟蹤使用者的session來完成的,通過actioncontext即可訪問到session中的屬性,***的intercepte(actioninvocation invocation)方法的invocation引數可以很輕易地訪問到請求相關的actioncontext例項。

許可權檢查***類的**如下:

//許可權檢查***繼承abstractinterceptor類

public class authorityinterceptor extends abstractinterceptor

//沒有登陸,將伺服器提示設定成乙個httpservletrequest屬性

ctx.put("tip" , "您還沒有登陸,請輸入scott,tiger登陸系統");

//直接返回login的邏輯檢視

return action.login;

} }

上面*****非常簡單,先通過actioninvocation引數取得使用者的session例項的引用,然後從中取出user屬性,通過判斷該屬性值來確定使用者是否登陸系統,從而判斷是否需要轉入登陸頁面。

2 配置許可權控制***

一旦實現了上面的許可權檢查***,就可以在所有需要實現許可權控制的action中復用上面的***。

為了使用該***,首先在struts.xml檔案中定義該***,定義***的配置片段如下:

定義了該***之後,可以在action中應用該***,應用該***的配置片段如下:

/web-inf/jsp/viewbook.jsp

上面名為viewbook的action,沒有指定class屬性,預設使用actionsupport類,配置該action時,只是指定了乙個result,指定返回success字串時,系統將轉入/web-inf/jsp/viewbook.jsp頁面。但並為未配置login檢視對應的jsp頁面。

考慮到這個***的重複使用,可能在多個action都需要跳轉到login邏輯試圖,故將login result定義成乙個全域性result。下面是配置login result的配置片段:

/login.jsp

經過上面的配置,如果瀏覽者在瀏覽器中直接傳送viewbook請求,將會轉入如圖所示的頁面。

這種通過***進行許可權控制的方式,顯然具有更好的**復用。

如果為了簡化struts.xml檔案的配置,避免在每個action中重複配置該***,可以將該***配置成乙個預設***棧(這個預設***棧應該包括default-stack***棧和許可權檢查***)。

定義自己的預設***棧的配置片段如下:

一旦定義了上面的mydefault***棧,這個***棧包含了許可權檢查***和系統預設的***棧。如果將這個***棧定義成預設***,則可以避免在每個action需要重複定義許可權檢查***。

下面是定義預設***的配置片段:

一旦在某個包下定義了上面的預設***棧,在該包下的所有action都會自動增加許可權檢查功能。對於那些不需要使用許可權控制的action,將它們定義在另外的包中——這個包中依然使用系統原來的預設***棧,將不會有許可權控制功能。

Struts2實現許可權控制

史上最全it資源,個人收藏總結!struts2的核心功能是通過乙個個interceptor來實現的,那麼使用者可以自定義乙個interceptor來實現許可權控制功能。步驟一 自定義乙個類,該類實現interceptor介面,重寫其intercept 方法。如 package edu.interce...

Struts2字尾 深入Struts2

一 將action字尾變成html字尾 xmlversion 1.0 encoding utf 8 doctype struts public apache software foundation dtd struts configuration 2.1 en struts include file...

Struts2入門(一)Struts2簡介

本章簡要介紹一下struts2框架 1.概念 我們知道,springmvc框架是為了整合servlet設計的控制層框架,那麼還有其他的框架也實現了這個功能,那麼就是struts2。struts2是乙個基於mvc設計模式的web應用框架,它本質上相當於乙個servlet,在mvc設計模式中,strut...