如何在页面中使用Acegi权限集合和taglib控制页面元素
王保政
Email:baozhengw@netease.com
JSP页面中的页面元素,URL,按钮是否可见或变灰都可通过Acegi标签库来实现,使用Acegi标签库,可设置不同的权限ID允许点击的按钮,访问的URL,或隐藏无权限的功能菜单。
如何配置和使用标签库?
打开acegi-security-<chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.0.3</chsdate>.jar,在META-INF目录中有一个authz.tld文件,将此文件复制到你的web应用的WEB-INF/tld中,然后配置web.xml,增加:
<taglib>
<taglib-uri>http://acegisecurity.sf.net/authz</taglib-uri>
<taglib-location>/WEB-INF/tld/authz.tld</taglib-location>
</taglib>
然后JSP页面可以通过声明<%@ taglib uri="http://acegisecurity.sf.net/authz" prefix="authz"%>来引用标签库。
声明了标签以后,在页面中可以按下面的格式使用acegi标签(authz标签可以嵌套使用):
<!-- 使用权限标签的例子,标签可以嵌套 -->
<authz:authorize ifAnyGranted="AUTH_USER">
<td> 一般用户权限
</td>
<authz:authorize ifAnyGranted="AUTH_ADMIN">
<td> 超级用户权限
</td>
</authz:authorize>
</authz:authorize>
<authz:authorize ifAnyGranted="AUTH_SYS">
<td> 系统维护权限
</td>
</authz:authorize>
也可以在JavaScript中用document.write输出权限标签:
<script language="JavaScript" type="text/javascript">
//订单中心
document.write('<authz:authorize ifAnyGranted="AUTH_TAG_ORDER_CENTER"> ');
new tree(TREE_ITEMS1, TREE_TPL);
document.write('</authz:authorize>');
</script>
在有javaScript脚本中有时不方便引用acegi标签,可以从SecurityContextHolder中获得权限集合,然后判断当前登录的用户,其权限集合中是否有某权限,根据判断结果来决定显示或隐藏哪些页面元素,见下面的JSP:
<%@ page contentType="text/html; charset=GBK"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
<%@ taglib uri="http://acegisecurity.sf.net/authz" prefix="authz"%>
<%@ page import="org.acegisecurity.Authentication" %>
<%@ page import="org.acegisecurity.context.SecurityContext" %>
<%@ page import="org.acegisecurity.context.SecurityContextHolder" %>
<%@ page import="org.acegisecurity.userdetails.UserDetails" %>
<%@ page import="org.acegisecurity.ui.AccessDeniedHandlerImpl" %>
<%@ page import="org.springframework.aop.framework.ProxyFactoryBean"%>
<%@ page import="org.springframework.context.ApplicationContext"%>
<%@ page import="org.springframework.context.support.ClassPathXmlApplicationContext"%>
<%@ page import="org.acegisecurity.GrantedAuthority"%>
<%@ page import="com.mysoft.common.ValidateAcegiAuth"%>
<%
SecurityContext ctx = SecurityContextHolder.getContext();
%>
。。。
<script language="JavaScript" type="text/javascript">
//下面是调用自定义的类ValidateAcegiAuth,输入当前登录用户的SecurityContext,及权限码,如果有AUTH_FUN_TICKET_CHKERR权限,则执行相应的JS脚本。
<%if(ValidateAcegiAuth.validate(ctx,"AUTH_FUN_TICKET_CHKERR")){%>
//具有AUTH_FUN_TICKET_CHKERR 权限,执行相应js脚本…
<%}%>
</script>
下面是ValidateAcegiAuth类的代码:
package com.mysoft.common;
import org.acegisecurity.Authentication;
import org.acegisecurity.context.SecurityContext;
import org.acegisecurity.context.SecurityContextHolder;
import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.ui.AccessDeniedHandlerImpl;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.acegisecurity.GrantedAuthority;
/**
* 验证权限集合中是否有某一权限
* @author bzwang
*
*
*/
public class ValidateAcegiAuth
{
/**
* 验证权限集合中是否有某一权限
* @param ctxLoginUser SecurityContext
* @param sAuthID 权限ID
* @return boolean 是否有指定的权限
*/
public static boolean validate(SecurityContext ctxLoginUser,String sAuthID)
{
boolean bool = false;
Authentication authLoginUser = null;
GrantedAuthority[] arrayAuthorities = null;
if(ctxLoginUser!=null)
{
authLoginUser = ctxLoginUser.getAuthentication();
if(authLoginUser!=null)
{
arrayAuthorities = authLoginUser.getAuthorities();
for(int i=0;i<arrayAuthorities.length;i++)
{
if(arrayAuthorities[i].toString().equals(sAuthID))
{
bool = true;
break;
}
}
}
else
{
bool = false;
}
}
else
{
bool = false;
}
return bool;
}
}
分享到:
相关推荐
标签:acegi-security-taglib-0.6.jar.zip,acegi,security,taglib,0.6,jar.zip包下载,依赖包
标签:acegi-security-taglib-0.6.1.jar.zip,acegi,security,taglib,0.6.1,jar.zip包下载,依赖包
标签:acegi-security-taglib-0.51.jar.zip,acegi,security,taglib,0.51,jar.zip包下载,依赖包
Spring Acegi权限控制,安全系统就只包括两个问题: 认证和授权.
Acegi是大明鼎鼎都开源权限控制框架,权限Acegi的使用文档,帮助你在应用系统中配置权限.
NULL 博文链接:https://zw7534313.iteye.com/blog/2224254
<br>真正高效的acegi权限配置,有效为你节省大量时间,因为你不需要再花费大量时间耗费在网络上查找“关于acegi的配置”; <br>acegi中高级配置在后文将陆续推出,敬请时刻关注; <br>下载资源仅需4分,相信你...
最近因为公司的需要,用acegi进行权限控制,简单总结了一下,和大家分享
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
基于rbac模式的acegi权限管理,搭建在spring基础上的权限管理. 注:浏览软件名称CAJViewer 7.0 太大了 上传不上来 自行下载
权限控制到按钮,甚至到一个div层,满足你苛刻的权限管理,你拿去直接放在tomcat就能用,不需要你另外再导入其它的包,都为你做好了。
包括:acegi-security-1.0.6.zip acegi-test.zip和集成ACEGI 进行权限控制详细介绍
acegi,acegi,acegi
Spring+acegi+ext2.0+mysql 开发 acegi做权限控制 ext2.0做前台显示 spring 做控制层 mysql 做数据库
spring acegi 使用工程demo
ACEGI,用于spring的权限控制框架
Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web... 在Acegi安全系统中,需要被认证的用户,系统或代理称为"Principal"。Acegi安全系统和其他的安全系统不同,它并没有角色和用户组的概念。