Acegi将资源权限数据存储到数据库.docx

上传人:b****2 文档编号:2209130 上传时间:2022-10-27 格式:DOCX 页数:20 大小:194.71KB
下载 相关 举报
Acegi将资源权限数据存储到数据库.docx_第1页
第1页 / 共20页
Acegi将资源权限数据存储到数据库.docx_第2页
第2页 / 共20页
Acegi将资源权限数据存储到数据库.docx_第3页
第3页 / 共20页
Acegi将资源权限数据存储到数据库.docx_第4页
第4页 / 共20页
Acegi将资源权限数据存储到数据库.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Acegi将资源权限数据存储到数据库.docx

《Acegi将资源权限数据存储到数据库.docx》由会员分享,可在线阅读,更多相关《Acegi将资源权限数据存储到数据库.docx(20页珍藏版)》请在冰豆网上搜索。

Acegi将资源权限数据存储到数据库.docx

Acegi将资源权限数据存储到数据库

夜阑犹翦灯花弄

赶项目--|回首页|2005年索引|--认识了一个叫丹丹的女孩

Acegi资源配置动态扩展实现--

                                      

1.问题提出

在使用AcegiSecurityFramework的过程中,如果细心的话,会发现其资源和角色配置是在配置文件中的,下面是Appfuse中相关配置:

class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor">

    

    

     

      

        CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

        PATTERN_TYPE_APACHE_ANT

        /signup.html=ROLE_ANONYMOUS,admin,tomcat

        /passwordhint.html*=ROLE_ANONYMOUS,admin,tomcat

        /**/*.html*=admin,tomcat

        /clickstreams.jsp=admin

      

    

  

2.E-R模型

下图是需要的E-R模型

图1Acegi标准RBACE-R设计

图中的用户与角色不再多做解释,我们主要关注一下Permission表和Resource表,这里Resource表用于存储系统资源,在web层一般来说就是url,如果使用acl,就是aclClass,此时Permission表中的aclMask用来存储对应的acl权限,考虑到acl在web项目中使用率不高,下面我将着重介绍web层的权限控制,对acl有兴趣的读者可以自己参阅AcegiReferenceGuide.

3.如何阻止acegi从配置文件读取权限配置

从Appfuse中的示例性配置可以看出,acegi对权限配置的要求是“资源=角色1,角色2…角色n”,看过源代码的读者应该知道,最终这些配置将被组装为net.sf.acegisecurity.intercept.ObjectDefinitionSource(web层对应的实现是net.sf.acegisecurity.intercept.web.FilterInvocationDefinitionSource),那么我们怎么才能用数据库的数据来组装FilterInvocationDefinitionSource?

这里涉及到一个PropertyEditor问题,在Acegi中,FilterInvocationDefinitionSource是通过net.sf.acegisecurity.intercept.web.FilterInvocationDefinitionSourceEditor组装的,假如我们不想让FilterInvocationDefinitionSourceEditor从配置文件中读取权限配置,就需要自己实现一个ProdertyEditor来覆盖默认实现,下面是我的配置:

图2customerEditorConfigurer配置

那么,这个PropertyEditor中需要做些什么呢?

要做的就是使用一个比较特殊的标记,当遇到这个特殊标记的时候直接略过解析,我这里使用的标记是“DONT_USE_ME”,然后在PropertyEditor中简单的如下实现即可:

/*

*Copyright2004-2005wangz.

*Projectshufe_newsroom

*/

packagecom.skyon.um.security.acegi.intercept.web;

importjava.beans.PropertyEditorSupport;

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.StringReader;

importnet.sf.acegisecurity.ConfigAttributeDefinition;

importnet.sf.acegisecurity.ConfigAttributeEditor;

importnet.sf.acegisecurity.intercept.web.FilterInvocationDefinitionMap;

importnet.sf.acegisecurity.intercept.web.PathBasedFilterInvocationDefinitionMap;

importnet.sf.acegisecurity.intercept.web.RegExpBasedFilterInvocationDefinitionMap;

importmons.lang.StringUtils;

importmons.logging.Log;

importmons.logging.LogFactory;

/**

*@since2005-8-4

*@author王政

*@version$Id:

FilterInvocationDefinitionSourceDynamicExtentionEditor.java,v1.22005/11/0415:

55:

07wangzhengExp$

*/

publicclassFilterInvocationDefinitionSourceDynamicExtentionEditorextends

    PropertyEditorSupport{

  publicstaticfinalStringANT_PATH_KEY="PATTERN_TYPE_APACHE_ANT";

  

  publicstaticfinalStringLOWER_CASE_URL_KEY="CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON";

  publicstaticfinalStringDONT_USE_ME_KEY="DONT_USE_ME";

  

  publicstaticfinalStringSTAND_DELIM_CHARACTER=",";

  privatestaticfinalLoglogger=LogFactory.getLog(FilterInvocationDefinitionSourceDynamicExtentionEditor.class);

  

  /**

   *@seejava.beans.PropertyEditorSupport#setAsText(java.lang.String)

   */

  publicvoidsetAsText(Stringtext)throwsIllegalArgumentException{        

    FilterInvocationDefinitionMapsource=newRegExpBasedFilterInvocationDefinitionMap();

        

    if(StringUtils.isBlank(text)){

      //Leavetargetobjectempty

    }else{     

      //Checkifweneedtooverridethedefaultdefinitionmap

      if(text.lastIndexOf(ANT_PATH_KEY)!

=-1){

        source=newPathBasedFilterInvocationDefinitionMap();

        if(logger.isDebugEnabled()){

          logger.debug(("DetectedPATTERN_TYPE_APACHE_ANTdirective;usingApacheAntstylepathexpressions"));

        }

      }

      if(text.lastIndexOf(LOWER_CASE_URL_KEY)!

=-1){

        if(logger.isDebugEnabled()){

          logger.debug("InstructingmappertoconvertURLstolowercasebeforecomparison");

        }

        source.setConvertUrlToLowercaseBeforeComparison(true);

      }

      

      if(text.indexOf(DONT_USE_ME_KEY)!

=-1){

        if(logger.isDebugEnabled()){

          logger.debug("DETECTED"+DONT_USE_ME_KEY+"directive; skipparse,Use"+EhCacheBasedFilterInvocationDefinitionSourceCache.class+"toparse!

");

        }

        addSecureUrl(source,"/dontuseme","dontuseme");

      }else{

        BufferedReaderbr=newBufferedReader(newStringReader(text));

        intcounter=0;

        Stringline;

        while(true){

          counter++;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1