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