常言笑的家

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 常言笑 阅读(299) 评论(0)  编辑  收藏 所属分类: JAVA/J2EE


只有注册用户登录后才能发表评论。


网站导航:
 

My Links

Blog Stats

常用链接

留言簿(5)

随笔分类

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜