`
mengyang
  • 浏览: 266533 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

讨论下对Acegi的扩展

阅读更多
    好吧,我承认取的标题太笼统了,有点哗众取宠的嫌疑了。
    首先说明,本篇要讨论的是对FilterSecurityInterceptor的扩展。
    FilterSecurityInterceptor用于对所有URL资源进行拦截,并施加有效地访问控制。但是在实际当中,很多应用(包括springside)在使用Acegi的时候都扩展了FilterSecurityInterceptor,理由是资源和权限的关系配置在XML中,显得不灵活,无法修改。
   
     我们首先看下一个关于FilterSecurityInterceptor的例子:
<bean id="filterSecurityInterceptor"
 class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
    ...
    <property name="objectDefinitionSource">
        <value>
            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
            PATTERN_TYPE_APACHE_ANT 
            /secure/admin/* = ROLE_ADMIN
            /secure/app/* = ROLE_USER
       </value>
    </property>
</bean>

    以上例子出自Spring Acegi Tutorial,在这个例子中资源和权限的对应关系是配置在objectDefinitionSource属性中,我们注意例子中把权限的名字以ROLE打头(很多例子中都是),其实有点误导人,这种命名容易让人产生一个误会:objectDefinitionSource里保存的是资源角色的对应关系:而如果真是这样,首先资源角色不好配置(不是一一对应),并且一旦配置后角色就固定了,在应用中就无法修改了。而有趣的是,不知道是否真的都受到了这个名字的影响,我们发现,目前网上基本所有对FilterSecurityInterceptor的扩展都是去获取资源角色的关系,扩展后它们的关系不用配置在XML中,可以去数据库中读取,但是这就不得不在修改角色的时候还要重新去查一次它们的关系。

    所以我就很搞不清楚的一个问题是,为什么会这么关心角色这个对象?角色实际上只是起到连接用户和权限的作用,我们真正关心的不应该是它。如果我们在FilterSecurityInterceptor的objectDefinitionSource属性中配置资源权限的列表,并且在认证过程中获得用户拥有的权限信息,那么一切不是都简单了很多了吗?
    如果说这里的资源就是一个URL,所谓的权限实际上也就是一个随便叫的字符串。只要它和URL资源一一对应就可以了,我们这样设计表:


    在认证过程中我们通过四张表的关联把用户和权限的关系给找出来:
<bean id="jdbcDaoImpl"
	class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
		...
		<property name="authoritiesByUsernameQuery">
			<value>
				SELECT u.USER_NAME,a.AUTHORITY_NAME 
				FROM TUSER u,TUSER_ROLE t,TROLE_AUTHORITY r,TAUTHORITY a
				WHERE u.ID =t.USER_ID AND r.ROLE_ID=t.ROLE_ID AND a.ID=r.AUTHORITY_id AND u.USER_NAME = ?
			</value>
		</property>
	</bean>


    然后我们在FilterSecurityInterceptor的属性objectDefinitionSource中保存资源和权限得对应关系:
<bean id="filterSecurityInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">   
        ...   
        <property name="objectDefinitionSource">   
            <value>   
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON   
                PATTERN_TYPE_APACHE_ANT  
                /secure/admin/* = auth_1
                /secure/app/* = auth_2
            </value>   
        </property>   
    </bean>

    这样由于objectDefinitionSource保存的是资源权限的关系,对角色的修改是不会影响到他的。所以我觉得FilterSecurityInterceptor是没有必要修改的,只要在使用的时候变通下就行了。而且我在做项目的时候也不觉的把资源权限的关系配置在XML中有多不灵活,所有数据我直接从数据库里导出来,复制粘贴下就好了~

    如果有人觉得关联四张表很萎缩的话,还可以把权限名给冗余到角色权限关联表中去,这样就可以少关联一张表。
分享到:
评论

相关推荐

    基于rbac模式的acegi权限管理

    接下来,我们讨论如何在Spring框架下实现这个系统。Spring的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)特性,使得Acegi Security能够无缝地集成到Spring应用中。通过...

    acegi学习整理合集

    "Acegi认证授权流程.txt"很可能是对Acegi中认证和授权流程的文本描述,包括用户请求的处理流程、权限检查、会话管理等。掌握这个流程对于调试和优化安全设置至关重要。 总的来说,这个合集提供了一个全面的学习路径...

    acegi实现用户权限

    Acegi Security是Spring框架的一个扩展,它提供了一套完整的安全解决方案,用于控制应用程序的访问权限。在这个主题中,我们将深入探讨Acegi Security的核心概念、配置以及如何在实际项目中应用。 首先,Acegi ...

    使用 Acegi 保护 Java 应用程序: 续二

    Acegi 安全框架是 Spring 框架的一个扩展,用于提供高级安全性和身份验证功能。在“使用 Acegi 保护 Java 应用程序:续二”这篇博文中,作者可能深入探讨了如何将 Acegi 集成到 Java 应用程序中,以增强其安全性,...

    使用 Acegi 保护 Java 应用程序: 续一

    Acegi 安全框架是 Spring 框架的一个扩展,用于提供高级安全性和身份验证功能。在 Java 应用程序中,特别是在企业级环境中,确保应用程序的安全性是至关重要的。Acegi 提供了一种灵活且强大的方式来管理用户权限、...

    spring2 struts2 acegi

    Struts 2则是一个基于MVC设计模式的Java Web框架,它整合了WebWork和Struts 1的优势,提供了一种强大的、可扩展的和灵活的方式来构建动态Web应用。Struts 2的核心功能包括动作调度、视图渲染、数据绑定、异常处理等...

    acegi(Spring Security) 参考手册

    最后,手册会讨论一些高级主题,如CSRF(跨站请求伪造)防护、XSS(跨站脚本)防护、SQL注入防御,以及如何与其他Spring模块(如Spring MVC、Spring WebFlow)集成。同时,手册还会提供一些最佳实践和常见问题的解决...

    struts + spring + hibernate + velocity + ajax + jotm + acegi

    Spring 还包括了对事务管理、数据访问集成、Web MVC的支持,与Struts相结合,可以进一步提升应用的灵活性和可扩展性。 3. **Hibernate**: Hibernate 是一个流行的Java对象关系映射(ORM)框架,允许开发者使用...

    SpringAcegiTutorial.rar

    4. **授权管理**:讨论如何使用Acegi进行访问控制,例如使用表达式式访问控制(Expression-Based Access Control, EBAC)和访问决策管理器(Access Decision Manager, ADM)。 5. **会话管理**:介绍会话固定保护、...

    现基于Spring框架应用的权限控制系统

    Acegi框架的集成和使用,不仅保持了Spring框架的轻量级和简洁性,而且通过高效的AOP和IoC机制,使得安全控制功能得以在不影响应用其他部分的前提下,灵活地扩展和维护。 在面对日益复杂的网络安全挑战时,利用Acegi...

    spring+ibtis框架

    下面我们将详细讨论如何在项目中整合Spring和iBatis,并介绍一些关键概念和技术。 1. **项目构建** - **JAR包管理**:在建立项目时,需要添加必要的库文件,如Spring和iBatis的JAR包,数据库驱动,以及日志、缓存...

    Ehcache最新版本的UserGuide

    讨论了Ehcache与其他流行框架如Spring、Cocoon和Acegi等的集成方法。 #### 五、核心功能 ##### 4.1 快速且轻量级 - **快速**:Ehcache具有极快的数据读写速度。 - **简单**:易于安装和配置。 - **小体积**:占用...

    jbpm 项目实践 1.2 (集成appfuse spring modules)

    Spring Modules则是Spring框架的一个扩展,旨在提供对其他流行框架(如Hibernate、SiteMesh、Acegi Security等)的集成。 集成jbpm、appfuse和Spring Modules的主要目的是利用它们各自的优势,实现业务流程的自动化...

    《精通Spring 2.x-企业应用开发详解》18-19

    4. **Spring的安全管理**:Spring Security(以前称为Acegi)是Spring的一个扩展模块,用于提供身份验证和授权功能。本章可能介绍如何配置和使用Spring Security来保护应用程序。 5. **Spring的批量处理与定时任务*...

    spring security 3

    - **扩展性与定制化**:Spring Security的设计允许开发者根据自己的需求对其进行扩展或定制,例如可以通过自定义AuthenticationProvider实现特定的认证逻辑。 3. **配置与部署** - **XML配置**:本书详细介绍了...

    SSH框架实验教学管理研究

    在这一背景下,利用SSH(Struts-Spring-Hibernate)框架搭建的实验教学管理平台成为了当前教学信息化的一个重要组成部分。本文将详细介绍SSH框架的基本概念、特点及其在实验教学管理中的应用。 #### 二、SSH框架...

    spring3类库

    下面将详细讨论Spring3中涉及的一些重要第三方类库。 1. **Hibernate** - 作为ORM(对象关系映射)框架,Hibernate是Spring3中用于数据库操作的首选。它允许开发者以面向对象的方式处理数据库事务,减少了对SQL的...

    Spring_Security_3

    - **起源与早期发展**:Spring Security 最初由 Ben Alex 在 2003 年创建,当时被称为“Spring Acegi 安全系统”或简称“Acegi 安全”。随着时间的推移,在 Ben 的领导下逐渐发展成为一个成熟且功能丰富的认证与访问...

    Spring Security 安全权限管理手册

    1. **强大的背景**:Spring Security 最初被称为 Acegi,后于 2.0 版本成为 Spring 框架的一部分。这意味着它拥有来自 Spring 社区的强大支持和技术保障。 2. **丰富的功能集**:Spring Security 支持多种安全机制...

Global site tag (gtag.js) - Google Analytics