下午上網的時候看到jad,以前曾經看到過這個,據說是速度非??斓膉ava反編譯器,這一段正好在用一個代碼生成插件Modelstry,有一個文件命名部分不符合java規范的bug,但沒有代碼也不好改,一直想自己修改一下,就下載來看看咯
???花了一些時間,執行 jad -o -r -sjava -dsrc Modelstry/**/*.class,反編譯了modelstry.jar,再自己重建成eclipse的工程,呵呵,反編譯的效果真的超強的, 只有一類幾乎一樣的錯誤,但是很容易就改好了,再重新打包成jar,放到plugin目錄下,經過幾次調試,哈哈,原來郁悶了我很久的變量命名問題,終于自己動手搞定了,慶祝一下;-P
在四月的最后一天,網上報名好了,我們的Accelerate SOA今后開始全力運作啦!
soa in action,our accelerate SOA!!
權限模型
把權限模型劃分為頁面訪問控制權限和數據權限
(
商業邏輯權限
)
。其中,頁面訪問控制權限主要在于控制頁面是否可以被訪問,比如,管理員可以訪問權限設置頁面。數據權限主要是指是否有操作某個數據的權限,比如說組織機構中的部分問題,一個部門應該只看到本部門的數據,這就是數據權限,這個應該在業務邏輯中控制,而不是頁面中。
本權限模型專注于頁面訪問控制,不涉及數據操作權限。使用用戶、角色、資源和操作來控制實際的頁面訪問。同時,區別于一般的頁面權限模型,本模型采用細粒度的權限控制,可以控制到頁面的具體操作,很不是整個頁面不加區分。所以,這樣就可以在一個頁面放置多個操作,方便于用戶,同時又不失安全性。
考慮到權限在實際中很少變動,使用數據庫的冗余設計,還有數據緩存等來提高效率。
?
用戶:
User
?????? Id
、
name
用戶角色表(
1
對多):
?????? Id
、
userID
、
roleID
角色
: Role
?????? Id
、
name
、
description
、
defaultPage
(系統初始化時,使用的登陸頁?)
權限
(Role-Resource-Operation)
:
Authority
?????? Id
、
role
、
resource
、
resourceURL
(為效率考慮采用的冗余,等同
Resource
中的
url
,在實際驗證中將使用該
url
來驗證)、
operationID
、
operationName
(為效率考慮,采用冗余,等同
Operation
中的
name
,實際驗證中使用該操作名稱來做驗證)
資源:
Resource
?????? Id
、
name
、
description
、
url
操作:
Operation
?????? Id
、
name(
一般應改為英文,對應方法的名字
)
、
description
?
BaseAction
中應該有一個
getMethodAuthMap
(),得到方法和可用操作的映射。如果映射中找不到,則直接使用該方法名當作操作名稱。如果方法映射找到了,但是為空,這意味著該方法對于任何用戶都是可以訪問的,不要求驗證。子類可以繼承和覆蓋該方法,來實現特殊的權限邏輯。
?
權限操作應該允許復制已有的權限來生成新的權限。
在前端控制器中設置已有的對于某個資源的操作,放到
hashtable
中,比如
auth
。對于頁面,使用表達式語言
EL
來限制實際的邏輯,比如如下要求對于當前頁面要有
delete
權限:
?????? <c:if test=”auth.delete”>
?????? </c:if>
同時,在整體頁面中,使用
struts
的
dispathAction
來做分發,
url
形如
url?method=delete
在執行該方法之前,首先檢查當前頁面的這個權限
delete
,如果可以,則導向到正確的頁面,否則導向到
accessDenied.do
頁面(注意,該頁面比較特殊,對于任何用戶都應該是可以訪問的,也就是前面的
getMethodAuthMap
返回為
NULL
)
?
???以前一直沒有弄明白
jaas
如何配置,看了
jaoso
這個論壇的源碼,還有這個http://www.linuxaid.com.cn/forum/showdoc.jsp?l=1&i=53549上面的代碼等等,以為一定要在
<
jre_home
>
/lib/security
/
java.security
文件中配置,就很疑惑這樣不是很受限制么,剛剛看了
JAAS:
靈活的
Java
安全機制
總算搞清楚了,可以通過配置系統屬性
java.security.auth.login.config
來指定
jaas
模塊的配置文件
???配置文件可以被任意命名,并且可以被放在任何位置。
JAAS
框架通過使用
java.securty.auth.long.config
屬性來確定配置文件的位置。例如當你的應用程序是
JaasTest
,配置文件是當前目錄下的
jaas.config
,你需要在命令行中輸入:
java -Djava.security.auth.login.config=jass.config JavaTest
???不過這樣還是比較麻煩,看jetspeed2源碼的時候,發現比較好的一個方法
System.setProperty("java.security.auth.login.config", loginConfigUrl.toString());
???這樣,配置文件就可以直接在程序中指定了,當移植到部署環境中,就不用再自己配置一遍了