以下代碼僅有S級權限的當前用戶顯示"我的工作"區
<script language="JavaScript" type="text/javascript">
document.write('<authz:authorize ifAnyGranted="ROLE_HRCHANGE_S"> ');
document.write('<li><a id="a1" href="#" title="我的工作">我的工作</a></li>');
document.write('</authz:authorize>');
</script>
以下轉自:http://yangruirui.javaeye.com/blog/496590
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;
}
}
posted on 2010-05-25 16:07
紫蝶∏飛揚↗ 閱讀(1395)
評論(0) 編輯 收藏 所屬分類:
EXTJS