常言笑的家

          Spring, Hibernate, Struts, Ajax, RoR

          Acegi 使用 Acl(2)

          流程說完了,接下對上面提到的問題解釋一下:

          引用

          先使用URL攔截的方式去對付大多數的情況,然后少數URL搞不定的再加一個接口,讓Action自己去判別。這樣用兩個攔截器對Action進行攔截,如果Action實現了hasPermission接口,那么就交給Action自己判斷,如果Action沒有該接口,就查找內部的URL和權限的對照表來判斷。

           

          這個情況比較復雜,因為是要對Action進行調用,所以要看使用的web框架來定奪。是用不同Web框架要是用不同的Web框架攔截器。所以恐怕acegi力不從心,挺多在filter里面配置一下是否要是用Action自身校驗。但是想法很好,贊。

           

          引用

          你怎么把信息有效的傳遞給Web層和其他的Facade層進行用戶友好性的提示處理?

           

          acegi校驗失敗的時候會拋出AuthenticationException異常,然后放在session里面,
          在錯誤轉向頁面可以這樣是用

          代碼
          <%= ((AuthenticationException) session.getAttribute(AbstractProcessingFilter.ACEGI_SECURITY_LAST_EXCEPTION_KEY)).getMessage() %>    
          <%= session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY) %>    
          <%= session.getAttribute(SecurityEnforcementFilter.ACEGI_SECURITY_ACCESS_DENIED_EXCEPTION_KEY) %> 

          不過這么用實在太難看了,暈了。可以自己用tag來搞定

           

           

          引用

          很多系統需要根據權限不同,生成不同的UI組件(例如管理員的菜單和普通用戶菜單就肯定不一樣),這也需要在Web層的View進行控制。

          acegi對View的處理就是使用tag,原來的acegi好像沒有什么tag,簡直是爛,現在有了tag,說一下是用的方法,但是說實話他的tag實在是不夠強。

           

          老版的web.xml

          代碼
          1<taglib>   
          2  <taglib-uri>http://acegisecurity.sf.net/authz</taglib-uri>   
          3  <taglib-location>/WEB-INF/authz.tld</taglib-location>   
          4</taglib>  

          在頁面中使用
          代碼
          1<authz:authorize ifAllGranted="ROLE_SUPERVISOR">   
          2<td>   
          3<HREF="del.htm?id=<c:out value="/${contact.id}"/>">Del</A>   
          4</td>   
          5</authz:authorize>  

          ifAllGranted是說所有的權限都有,用','分割權限
          可以替換成ifAnyGranted: ifNotGranted:

           

           

          代碼
          1<authz:authentication operation="username"/>   

           

          這個是用來顯示你的權限信息的。

           

          代碼
          1<authz:acl domainObject="${contact}" hasPermission="16,1">   
          2<td><HREF="<c:url value="del.htm"><c:param name="contactId"   
          3value="${contact.id}"/></c:url>">Del</A></td>   
          4</authz:acl>  

          posted on 2006-12-16 22:31 常言笑 閱讀(307) 評論(0)  編輯  收藏 所屬分類: JAVA/J2EE

          My Links

          Blog Stats

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 兴城市| 承德市| 东莞市| 凉城县| 保德县| 双桥区| 垣曲县| 来凤县| 定边县| 奉贤区| 宜城市| 贡觉县| 巴塘县| 长武县| 仲巴县| 潼关县| 滦平县| 洛川县| 宜良县| 成都市| 治县。| 乌兰察布市| 吉安市| 游戏| 绥宁县| 唐山市| 富顺县| 武川县| 罗甸县| 庄河市| 湖北省| 麻阳| 中牟县| 新宾| 福建省| 宜春市| 吉水县| 思茅市| 榆林市| 苍溪县| 潢川县|