細顆粒度許可權控制我們採用***完成
具體實現:
第一步:定義乙個類 繼承methodfilterinterceptor類
第二步:覆蓋dointercept方法
第三步:通過actioninvocation 物件獲取reques、actiont物件 進而獲取方法名
第四步:通過action物件和反射獲取方法的反射物件
第五步:獲取session中的角色使用者資訊以及方法上的許可權(註解)來校驗該使用者是否有操作該方法的許可權
第六步:在struts.xml中配置
**實現:
protected string dointercept(actioninvocation actioninvocation) throws exception else
return result;
}catch (exception e)
/*** 傳送錯誤訊息到頁面
*/request.setattribute("errormsg", errormsg);
/***log4j記錄日誌
*/log log=logfactory.getlog(actioninvocation.getaction().getclass());
log.error("errormsg",e);
return "errormsg";}}
/**驗證細顆粒許可權控制*/
//獲取當前的登陸使用者
elecuser elecuser=(elecuser) request.getsession().getattribute("globle_user");
if(elecuser==null)
//獲取當前登陸角色的使用者(乙個使用者可能有多個角色)
hashtableht=(hashtable) request.getsession().getattribute("globle_role");
if(ht==null || ht.size()<=0)
//處理註解,判斷方法上是否存在註解(註解的名稱為:annotationlimit)
/** 例如:
* @annotationlimit(mid="aa",pid="0")
public string home()
//存在註解(呼叫註解)
annotationlimit limit = method.getannotation(annotationlimit.class);
//獲取註解上的值
string mid = limit.mid(); //許可權子模組名稱
string pid = limit.pid(); //許可權父操作名稱
//遍歷角色id
if(ht!=null && ht.size()>0)}}
return flag;}
配置檔案**實現(struts2.xml)
menuhome,title,left,change,loading,logout,alermstation,alermdevice,showmenu
總結:細顆粒的許可權控制總結
1.使用struts2的***
2.定義乙個註解(mid,pid),對應許可權code和父級許可權的code,將註解新增到action類中的每乙個方法
3.每乙個action類的方法上新增註解(mid="",pid=""),表示方法的唯一標識(即 該方法所具有的許可權)
4.在struts2的***中,從session中獲取角色id,獲取action類上的註解(mid和pid),使用角色id,mid和pid查詢角色許可權表,判斷當前使用者是否可以操作該方法
粗粒度與細粒度許可權控制
粗粒度許可權管理,對資源型別的許可權管理。資源型別比如 選單 url連線 使用者新增頁面 使用者資訊 類方法 頁面中按鈕。粗粒度許可權管理比如 超級管理員可以訪問戶新增頁面 使用者資訊等全部頁面。部門管理員可以訪問使用者資訊頁面包括 頁面中所有按鈕。細粒度許可權管理,對資源例項的許可權管理。資源例項...
SQL 2005 許可權控制粒度
第一步建立登入名和使用者名稱 建立登入名 viewer,db1為預設資料庫,123456為密碼 create login viewer with password 123456 default database db1 第二步為使用者授權 請注意是使用者不是登入名,使用者和登入名是對應的,但名稱可以...
二 測試的粒度,我們到底應該把粒度控制到多細?
對於資料不穩定的討論 url 是不是一定要測試到具體數值才叫具體?在沒有找到新方法之前,想保證測試具體到結果或者說是數值準確,那這個測試 會表現的非常脆弱,而花費了很多心思去寫出完美的測試最後這段測試 也沒有測出任何問題,有些得不償失了。為什麼要寫測試?都是為了寫出健壯的 正確的行為,獲得重構的勇氣...