`
yangyi
  • 浏览: 114562 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Security 2 中动态角色实现的讨论

    博客分类:
  • Java
阅读更多
安全框架的主体包括两部分即验权和授权。Spring Security2可以很好的实现这两个过程。Spring Security2对其前身acegi最大的改进是提供了自定义的配置标签,通过Security的命名空间定义了http和authentication-provider等标签,这样做的好处是极大地简化了框架的配置,并很好地隐藏了框架实现的细节,在配置的表述上也更清晰,总体上提高了框架的易用性。

然而,该框架默认的权限配置方式在xml中,又因为新版本隐藏了实现细节,在动态权限的扩展上,能力变小了。在验权过程中,遇到的问题不多。但在授权时,如果是acegi,人们可以通过继承AbstractFilterInvocationDefinitionSource类实现在授权(即资源角色和用户角色的匹配)前,针对资源的角色的获取。而新版本因为用新标签进行了整合,这个过程被默认的类实现隐藏掉了,包括过滤器,资源获取和角色定义等过程都由框架来实现,于是很多人在使用Spring Security2时也想通过改动DefaultFilterInvocationDefinitionSource对资源的获取来实现数据库或文件中的动态的角色。不过这样的改动侵入性比较高,而且还保留了acegi的痕迹,也违背了开闭的原则。

其实,我们完全可以通过Spring Security2 accessManager提供的自定义投票机制来解决这个问题,这样既不影响现有的基于URL的配置,还可以加入自己的动态的权限配置。

         其实现策略如下:

1 定义类DynamicRoleVoter实现AccessDecisionVoter,注入实现接口DynamicRoleProvider(用来定义获取角色的方法)的提供动态角色的类

2 在两个supports方法中返回true

3 在vote方法中,有三个参数(Authentication authentication, Object object,ConfigAttributeDefinition config) 通过第一个获取用户的权限集合,第二个可以获取到资源对象,进而通过DynamicRoleProvider获取到角色集合进行匹配。

4 在配置文件中加入DynamicRoleVoter,如下:

<beans:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
<beans:property name="decisionVoters">
<beans:list>
<beans:bean class="org.springframework.security.vote.RoleVoter" />
<beans:bean class="org.springframework.security.vote.AuthenticatedVoter" />
<beans:bean class="DynamicRoleVoter">
    <beans:property name="dynamicRoleProvider">
        <beans:ref local="dynamicRoleProvider"/>
</beans:property>
</beans:bean>
</beans:list>
</beans:property>
</beans:bean>
<beans:bean id=” dynamicRoleProvider” class=”…”>
    ……
</beans:bean>

分享到:
评论

相关推荐

    《【Spring Security系列】基于Spring Security实现权限动态分配之用户-角色分配》文章中的表结构资源

    在Spring Security框架中,权限动态分配是实现安全控制的关键部分。这一系列文章聚焦于如何利用Spring Security构建一个灵活且可扩展的权限管理系统,特别是在用户与角色的动态分配方面。在这个过程中,数据库表的...

    Spring Security+OAuth2 精讲,打造企业级认证与授权

    学习这门课程,开发者将不仅理解Spring Security和OAuth2的基本原理,还能掌握如何在实际项目中灵活运用,从而提高企业级应用的安全性和可靠性。对于任何希望提升安全技能的Java开发者来说,这是一份不可多得的学习...

    SpringSecurity素材.rar

    在SpringBoot Web开发中,SpringSecurity扮演着核心角色,负责处理身份验证、授权以及访问控制等方面的安全需求。狂神(秦疆)的教程以SpringBoot为基础,深入讲解了如何集成和使用SpringSecurity来构建安全的Web...

    spring security demo2

    让我们详细讨论Spring Security的核心概念、配置以及它在实践中的应用。 1. **核心概念:** - **Authentication(身份验证)**:确认用户的身份。Spring Security提供了多种认证机制,包括基于表单的登录、HTTP...

    Spring Security 2 参考手册 中文版 (html格式)

    `ca.html`和`springsecurity.html`的详细内容没有明确的描述,但根据常规,它们可能涉及证书权威(CA)和Spring Security的其他核心概念,比如自定义安全逻辑或者框架的高级特性。 总的来说,Spring Security 2 的...

    spring security + spring oauth2 +spring mvc SSO单点登录需要的最小jar包集合

    Spring Security、Spring OAuth2 和 Spring MVC 是构建现代Web应用程序中常用的安全框架和技术。Spring Security 提供了一套全面的授权和认证解决方案,而Spring OAuth2 则是用于处理身份验证和授权的服务提供者协议...

    Spring Security 安全权限管理手册 PDF

    在Spring Security中,用户、角色和权限的关系通过安全上下文和访问决策管理器来维护。用户通过认证过程获取身份,然后根据分配的角色和权限来决定他们可以访问哪些资源。手册会详细解释如何配置和使用这些组件,...

    Spring Security 2.0.x完全中文参考文档

    Spring Security 提供了一套完整的解决方案来解决Web应用程序和普通Java应用程序中的安全问题,包括认证(Authentication)、授权(Authorization)以及安全配置等。 **1.2. 历史** Spring Security 的前身是Acegi...

    SpringBoot集成Spring Security登录管理 添加 session 共享【完整源码+数据库】

    我们将基于给定的标签——SpringBoot、SpringSecurity、mysql、session共享和idea来构建一个完整的示例。 首先,SpringBoot是一个轻量级的Java框架,它简化了创建独立的、生产级别的基于Spring的应用程序。通过内置...

    spring security 3

    - **基于角色的访问控制(RBAC)**:介绍如何利用Spring Security提供的RoleVoter等组件实现基于角色的访问控制。 - **细粒度授权**:讨论了如何实现更细致的权限控制,比如针对不同的资源或操作设置不同的访问...

    基于 Spring Boot 3Spring Security 6Vue.js 3 的前后端分离式论坛系统

    Spring Security 6 可能包括改进的身份验证和授权机制、支持最新的OAuth2标准以及增强的加密和安全配置选项。在这个论坛系统中,它扮演着核心角色,负责用户身份验证、权限管理、防止XSS、CSRF等安全威胁。 **Vue....

    maven+springMVC+spring security权限实例

    在Spring Security中,这些可以通过定义访问控制规则、配置安全元数据、以及实现自定义的认证和授权逻辑来实现。例如,通过定义不同的角色(如管理员、普通用户),并为每个角色分配不同的权限(如查看、编辑、删除...

    springsecurity2x.pdf

    在 "springsecurity2x.pdf" 中,主要讨论的是Spring Security 2.x版本的相关内容。 1. **Spring Security简介** - **什么是Spring Security?** 它是一个全面的安全框架,提供了认证(Authentication)和授权...

    Pro+Spring+Security

    - 基于角色的安全策略:探讨如何基于用户角色在业务逻辑中实现安全控制,包括角色的管理和角色继承的概念。 第八章:自定义和扩展Spring Security(Customizing and Extending Spring Security) - 拦截器和过滤器...

    Spring Security最新文档(英文)

    最新文档5.1.1版本详细说明了如何使用Spring Security来保护基于Spring的应用,其中涵盖了各种安全策略的配置和实现方式。以下是从文档中提取的一些关键知识点: 1. **版权和复制说明**:文档的这一部分声明了对...

    spring security 优秀中文资料+例子(包含多个中文资料,很全)

    "SpringSecurity学习总结.pdf" 很可能是一位经验丰富的开发者对Spring Security学习的个人总结,可能包含了一些实战中的技巧和最佳实践。这类资料往往具有很高的实用价值,因为它通常包含了作者在实际项目中遇到的...

    实战Spring Security 3.x:快速构建企业级安全.pdf

    在授权方面,Spring Security提供了角色、权限、访问决策策略等概念,让开发者可以方便地进行权限分配和访问控制。通过使用预定义的注解(如@Secured、@PreAuthorize、@PostAuthorize)或自定义访问决策策略,可以...

Global site tag (gtag.js) - Google Analytics