隨筆-9  評論-168  文章-266  trackbacks-0
           

          以下代碼僅有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 紫蝶∏飛揚↗ 閱讀(1399) 評論(0)  編輯  收藏 所屬分類: EXTJS
          主站蜘蛛池模板: 九江县| 精河县| 修水县| 英超| 彭水| 茶陵县| 竹北市| 井冈山市| 镇雄县| 紫阳县| 元朗区| 汉沽区| 中卫市| 安西县| 读书| 岳池县| 东莞市| 当涂县| 合肥市| 巍山| 泸溪县| 高淳县| 息烽县| 当涂县| 周至县| 鲁山县| 长白| 东明县| 汾西县| 三明市| 眉山市| 阜宁县| 平邑县| 镇雄县| 安泽县| 南昌县| 新昌县| 桦南县| 牙克石市| 长汀县| 东台市|