流程說完了,接下對上面提到的問題解釋一下:
引用
先使用URL攔截的方式去對付大多數(shù)的情況,然后少數(shù)URL搞不定的再加一個接口,讓Action自己去判別。這樣用兩個攔截器對Action進(jìn)行攔截,如果Action實現(xiàn)了hasPermission接口,那么就交給Action自己判斷,如果Action沒有該接口,就查找內(nèi)部的URL和權(quán)限的對照表來判斷。
這個情況比較復(fù)雜,因為是要對Action進(jìn)行調(diào)用,所以要看使用的web框架來定奪。是用不同Web框架要是用不同的Web框架攔截器。所以恐怕acegi力不從心,挺多在filter里面配置一下是否要是用Action自身校驗。但是想法很好,贊。
引用
你怎么把信息有效的傳遞給Web層和其他的Facade層進(jìn)行用戶友好性的提示處理?
acegi校驗失敗的時候會拋出AuthenticationException異常,然后放在session里面,
在錯誤轉(zhuǎn)向頁面可以這樣是用
不過這么用實在太難看了,暈了。可以自己用tag來搞定
引用
很多系統(tǒng)需要根據(jù)權(quán)限不同,生成不同的UI組件(例如管理員的菜單和普通用戶菜單就肯定不一樣),這也需要在Web層的View進(jìn)行控制。
acegi對View的處理就是使用tag,原來的acegi好像沒有什么tag,簡直是爛,現(xiàn)在有了tag,說一下是用的方法,但是說實話他的tag實在是不夠強(qiáng)。
老版的web.xml
在頁面中使用
ifAllGranted是說所有的權(quán)限都有,用','分割權(quán)限
可以替換成ifAnyGranted: ifNotGranted:
代碼
1
<authz:authentication operation="username"/>
這個是用來顯示你的權(quán)限信息的。