Acegi使用2

Acegi使用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"    
3 value ="${contact.id}" /></ c:url > ">Del </ A ></ td >    
4 </ authz:acl >   

你可能感兴趣的:(Acegi使用2)