如何在页面中使用Acegi权限集合和taglib控制页面元素

如何在页面中使用Acegi权限集合和taglib控制页面元素

 

王保政

Email:[email protected]

 

JSP页面中的页面元素,URL,按钮是否可见或变灰都可通过Acegi标签库来实现,使用Acegi标签库,可设置不同的权限ID允许点击的按钮,访问的URL,或隐藏无权限的功能菜单。

如何配置和使用标签库?

打开acegi-security-1.0.3.jar,META-INF目录中有一个authz.tld文件,将此文件复制到你的web应用的WEB-INF/tld中,然后配置web.xml,增加:

         

        http://acegisecurity.sf.net/authz  

        /WEB-INF/tld/authz.tld  

     

 

然后JSP页面可以通过声明<%@ taglib uri="http://acegisecurity.sf.net/authz" prefix="authz"%>来引用标签库。

 

声明了标签以后,在页面中可以按下面的格式使用acegi标签(authz标签可以嵌套使用)

 

 

  

      一般用户权限

        

   

      超级用户权限

        

     

     

          

      系统维护权限

        

     

 

也可以在JavaScript中用document.write输出权限标签:

 

在有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();

 

%>

。。。

 

下面是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

                         {

                             if(arrayAuthorities[i].toString().equals(sAuthID))

                          {

                             bool = true;  

                               break;

                          }

                         }

                                 

                  }

                  else

                  {

                         bool = false;

                  }

               

           }

              else

              {

                     bool = false;

              }

               

             

              return bool;

       }

 

}

 

你可能感兴趣的:(Java)