安全框架的主体包括两部分即验权和授权。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和OAuth2的基本原理,还能掌握如何在实际项目中灵活运用,从而提高企业级应用的安全性和可靠性。对于任何希望提升安全技能的Java开发者来说,这是一份不可多得的学习...
在Spring Security框架中,权限动态分配是实现安全控制的关键部分。这一系列文章聚焦于如何利用Spring Security构建一个灵活且可扩展的权限管理系统,特别是在用户与角色的动态分配方面。在这个过程中,数据库表的...
在SpringBoot Web开发中,SpringSecurity扮演着核心角色,负责处理身份验证、授权以及访问控制等方面的安全需求。狂神(秦疆)的教程以SpringBoot为基础,深入讲解了如何集成和使用SpringSecurity来构建安全的Web...
让我们详细讨论Spring Security的核心概念、配置以及它在实践中的应用。 1. **核心概念:** - **Authentication(身份验证)**:确认用户的身份。Spring Security提供了多种认证机制,包括基于表单的登录、HTTP...
`ca.html`和`springsecurity.html`的详细内容没有明确的描述,但根据常规,它们可能涉及证书权威(CA)和Spring Security的其他核心概念,比如自定义安全逻辑或者框架的高级特性。 总的来说,Spring Security 2 的...
Spring Security、Spring OAuth2 和 Spring MVC 是构建现代Web应用程序中常用的安全框架和技术。Spring Security 提供了一套全面的授权和认证解决方案,而Spring OAuth2 则是用于处理身份验证和授权的服务提供者协议...
在Spring Security中,用户、角色和权限的关系通过安全上下文和访问决策管理器来维护。用户通过认证过程获取身份,然后根据分配的角色和权限来决定他们可以访问哪些资源。手册会详细解释如何配置和使用这些组件,...
Spring Security 提供了一套完整的解决方案来解决Web应用程序和普通Java应用程序中的安全问题,包括认证(Authentication)、授权(Authorization)以及安全配置等。 **1.2. 历史** Spring Security 的前身是Acegi...
我们将基于给定的标签——SpringBoot、SpringSecurity、mysql、session共享和idea来构建一个完整的示例。 首先,SpringBoot是一个轻量级的Java框架,它简化了创建独立的、生产级别的基于Spring的应用程序。通过内置...
- **基于角色的访问控制(RBAC)**:介绍如何利用Spring Security提供的RoleVoter等组件实现基于角色的访问控制。 - **细粒度授权**:讨论了如何实现更细致的权限控制,比如针对不同的资源或操作设置不同的访问...
Spring Security 6 可能包括改进的身份验证和授权机制、支持最新的OAuth2标准以及增强的加密和安全配置选项。在这个论坛系统中,它扮演着核心角色,负责用户身份验证、权限管理、防止XSS、CSRF等安全威胁。 **Vue....
在Spring Security中,这些可以通过定义访问控制规则、配置安全元数据、以及实现自定义的认证和授权逻辑来实现。例如,通过定义不同的角色(如管理员、普通用户),并为每个角色分配不同的权限(如查看、编辑、删除...
- **使用Spring Security的标签库有选择地渲染内容**:介绍如何利用Spring Security标签库实现动态内容展示。 - **使用控制器逻辑进行有条件渲染内容**:说明如何在控制器中实现条件渲染。 - **配置页面内授权的...
在 "springsecurity2x.pdf" 中,主要讨论的是Spring Security 2.x版本的相关内容。 1. **Spring Security简介** - **什么是Spring Security?** 它是一个全面的安全框架,提供了认证(Authentication)和授权...
根据给定的信息,我们可以从《Spring Security3 中文版》一书中提炼出多个重要的知识点,主要涉及Spring Security的基础概念、具体实现以及高级配置等方面。下面将详细解释每一部分的关键内容。 ### 第一章:一个不...
- 基于角色的安全策略:探讨如何基于用户角色在业务逻辑中实现安全控制,包括角色的管理和角色继承的概念。 第八章:自定义和扩展Spring Security(Customizing and Extending Spring Security) - 拦截器和过滤器...
最新文档5.1.1版本详细说明了如何使用Spring Security来保护基于Spring的应用,其中涵盖了各种安全策略的配置和实现方式。以下是从文档中提取的一些关键知识点: 1. **版权和复制说明**:文档的这一部分声明了对...
"SpringSecurity学习总结.pdf" 很可能是一位经验丰富的开发者对Spring Security学习的个人总结,可能包含了一些实战中的技巧和最佳实践。这类资料往往具有很高的实用价值,因为它通常包含了作者在实际项目中遇到的...
在授权方面,Spring Security提供了角色、权限、访问决策策略等概念,让开发者可以方便地进行权限分配和访问控制。通过使用预定义的注解(如@Secured、@PreAuthorize、@PostAuthorize)或自定义访问决策策略,可以...
下面将详细讨论Spring Security的主要组件、功能以及在3.0.5版本中的特性。 首先,Spring Security的核心概念是基于角色的访问控制(RBAC)。它允许开发者定义安全策略,包括哪些用户可以访问哪些资源,以及他们对...