`

Spring Security介绍(3)

阅读更多

7.3  控制访问

身份验证只是Spring Security安全保护机制中的第一步。一旦Spring Security弄清用户的身份后,它必须决定是否允许用户访问由它保护的资源。在图7.1中,我们已经配置了认证管理器。现在,该配置访问决策管理器 了。访问决策管理器负责决定用户是否拥有恰当的权限访问受保护的资源。它们是由 org.acegisecurity.AccessDecisionManager接口定义的:

 

这里的supports()方法根据受保护资源的类类型以及它的配置属性(受保护资源的访问要求)来 判断访问决策管理器是否能够针对该资源做出访问决策。这里的decide()方法是完成最终决定的地方。如果它没有抛出一个 AccessDeniedException或者是InsufficientAuthenticationException而返回,则允许访问受保护的 资源。否则,访问被拒绝。

 

7.3.1  访问决策投票

Spring Security的访问决策管理器最终负责为一个已通过身份验证的用户确定访问权限。不过,它们并不是完全依靠自己而完成这些决策的,而是通过征询一个或 多个对某一用户是否有权访问受保护资源进行投票的对象。一旦获得所有的投票结果,决策管理器便将统计得票情况,并做出它的最终决定。

如表7.3所列,Spring Security带有AccessDecisionManager的三个实现,每一个都采用一种不同的方法来统计得票情况。

表7.3   Spring Security的访问决策管理器通过统计是否允许
某一用户进入的得票来帮助决定是否同意该用户访问

访问决策管理器

如何决定同意 / 拒绝访问

org.acegisecurity.vote.AffirmativeBased

只要有一个投票者投票赞成授予访问权,就允许访问

org.acegisecurity.vote.ConsensusBased

只要大多数投票者投票赞成授予访问权,就允许访问

org.acegisecurity.vote.UnanimousBased

只有当所有投票者都投票赞成授予访问权时,才允许访问

在Spring配置文件中,所有的访问决策管理器都是以相同的方式进行配置的。比如说,下面这一段XML选段配置了一个UnanimousBased访问决策管理器:

 

通过这里的decisionVoters属性,你可以为访问决策管理器提供一组投票者。在上述情况中,只有一个投票者,它引用了一个名为roleVoter的Bean。下面让我们看一下这个roleVoter是如何配置的。

 

7.3.2  决定如何投票

尽管访问决策投票者对是否授权访问某个受保护的资源没有最终发言权(该项工作属于访问决策管理器),但是它们在访问决策过程中扮演着重要的角色。一 个访问决策投票者的工作是同时考虑用户已拥有的授权和受保护资源配置属性中所要求的授权。基于这些信息,访问决策投票者通过投票为访问决策管理器做出决策 提供支持。

任何实现org.acegisecurity.vote.AccessDecisionVoter接口的对象都是一个访问决策投票者:

 

可以看到,这个AccessDecisionVoter接口和AccessDecisionManager接口非常相似。最大的区别在于,这里没有 返回void的decide()方法,而是一个返回int的vote()方法。那是因为访问决策投票者并不决定是否允许访问,它仅仅就是否授予访问权限投 出它自己的一票。

在获得投票机会时,访问决策投票者能够以下面三种方式之一进行投票:

ACCESS_GRANTED——投票者希望允许访问受保护的资源。

ACCESS_DENIED——投票者希望拒绝对受保护资源的访问。

ACCESS_ABSTAIN——投票者保持中立。

与绝大多数的Spring Security组件相同,你也可以自由地编写自己的AccessDecision Voter的实现类。然而,Spring Security提供有一个很实用的投票者实现类RoleVoter,它在受保护资源的配置属性代表一个角色时进行投票。说得更具体一些,就是在受保护资 源有一个名称以ROLE_打头的配置属性时,RoleVoter参与投票。

RoleVoter决定其投票结果的方式是通过简单地将受保护资源的所有配置属性(以ROLE_作为前缀)与已授予认证用户的所有权限进行比较。如 果RoleVoter发现其中有一个是匹配的,则它投ACCESS_GRANTED票。否则,它将投ACCESS_DENIED票。

RoleVoter将只在访问所需的授权不是以ROLE_为前缀时放弃投票。举例来说,如果受保护的资源仅仅要求非角色的授权(比如说CREATE_USER),那么RoleVoter将放弃投票。

你可以在Spring配置文件中使用下列XML配置一个RoleVoter:

 

如前所述,RoleVoter只有在受保护资源具有以ROLE_为前缀的配置属性时才进行投票。然而,这个ROLE_前缀只是默认值。你可以选择通过设置rolePrefix属性来覆盖这个默认前缀:

 

在这里,默认的前缀已被覆盖为GROUP_。因此,这个RoleVoter现在将只针对以GROUP_为前缀的权限进行授权投票。

 

7.3.3  处理投票弃权

在知道了任何一个投票者都可以投允许、拒绝或弃权票之后,现在你可能会问:如果所有投票者都投弃权票,会发生什么呢?那个用户究竟会被授权还是拒绝访问?

在默认情况下,如果所有投票者全都投弃权票,那么所有的访问决策管理者都将拒绝对资源的访问。不过,你可以通过将访问决策管理者的allowIfAllAbstain属性设置为true来覆盖这个默认行为:

 

通过把allowIfAllAbstain设置为true,你就确立了一个“沉默即同意”的政策。换句话说,如果所有的投票者都放弃投票,则如同它们都投赞成票一样,访问将被授权。

现在,你已经看到Spring Security的身份验证和访问控制管理器是如何工作的了,下面让我们把它们投入使用。在下一节中,你将看到如何使用Spring Security的一组Servlet过滤器来保护一个Web应用程序。稍后,在第7.6节,我们将深入到一个应用程序内部,考察如何使用Spring AOP在方法调用级上实施保护。

 

 

分享到:
评论

相关推荐

    Spring Security in Action

    Spring Security 实践指南 Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户...

    spring security3 中文版本

    ### Spring Security 3.0.1 中文版知识点解析...通过上述知识点的介绍,我们了解了 Spring Security 的核心概念、配置方式以及一些高级特性,这有助于开发者更好地利用 Spring Security 为应用程序构建强大的安全防护。

    Spring Security 资料合集

    这三份资料——"实战Spring Security 3.x.pdf"、"Spring Security 3.pdf" 和 "Spring Security使用手册.pdf" 将深入探讨这些概念,并提供实践指导,帮助读者掌握如何在实际项目中应用Spring Security。通过学习这些...

    SpringSecurity.pdf

    Spring Security是一个功能强大、高度定制的安全框架,它专门用于为基于Spring的应用程序提供安全性解决方案。Spring Security架构的设计初衷是为了解决认证和授权的需求,确保应用程序的安全性。它提供了全面的安全...

    SpringSecurity笔记,编程不良人笔记

    3. **SpringBoot整合SpringSecurity** - `spring-boot-starter-security`依赖:SpringBoot项目中添加此依赖即可自动配置SpringSecurity。 - 自定义登录页面:通过设置`loginPage`和`loginProcessingUrl`属性,可以...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    spring security 完整项目实例

    Spring Security 是一个强大的安全框架,用于为Java应用提供身份验证和授权服务。在这个完整的项目实例中,我们将深入探讨Spring Security的核心概念以及如何将其应用于实际的Web应用程序开发。 首先,我们从用户、...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    3. **定制Filter**:在Spring Cloud Gateway中,我们可以自定义WebFlux Filter,利用Spring Security提供的API进行认证和鉴权。这通常涉及到`@PreAuthorize`和`@Secured`等注解的使用,以控制对特定路由的访问权限。...

    spring Security3中文教程,经典的

    ### Spring Security3中文教程知识点概览 #### 一、安全核心概念与起步 Spring Security是Spring框架中的一个重要组成部分,主要用于为Web应用提供安全防护。它不仅提供了强大的认证和授权功能,还支持各种加密...

    SpringSecurity学习总结源代码

    SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、授权和访问控制功能。在本文中,我们将深入探讨SpringSecurity的核心概念、关键组件以及如何配置和使用这个框架。 首先,Spring...

    Spring Security 3.pdf

    在Spring Security 3版本中,它引入了许多改进和新特性,以适应不断变化的安全需求和挑战。 一、核心概念 1. **Filter Chain**: Spring Security 的核心在于其过滤器链,它拦截HTTP请求并执行相应的安全处理。过滤...

    Spring Security.pdf

    第三章介绍了如何构建Spring Security工程。在创建项目时,可以通过IDE或者Maven命令创建新的Maven项目。在创建项目时,需要填写项目名称、groupId、artifactId等信息,并选择合适的Maven版本。在项目的pom.xml文件...

    spring spring security2.5 jar

    3. **过滤器链**:Spring Security的核心在于其过滤器链,它拦截HTTP请求并应用安全策略。`FilterSecurityInterceptor`是其中的关键组件,负责根据配置的访问规则对请求进行处理。 4. **会话管理**:Spring ...

    Spring Security-3中文官方文档(及教程)

    Spring Security 3是中国社区翻译的官方文档,为国内开发者提供了方便的学习资源。 本套文档包含了Spring Security的基础概念、配置、核心组件以及实际应用场景的详细讲解。以下是一些关键知识点的概述: 1. **...

    spring security 官方文档

    3. **过滤器链(Filter Chain)**:Spring Security的核心是其过滤器链,它在HTTP请求被处理之前进行拦截。过滤器链包含多个预定义的过滤器,如`HttpServletRequestWrapperFilter`、`AnonymousAuthenticationFilter`...

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的安全性。它构建在Spring Framework基础之上,提供了全面的安全解决方案,包括身份验证、授权、攻击防护等功能。 Spring...

    SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    SpringBoot+SpringSecurity处理Ajax登录请求问题是SpringBoot开发中的一個常见问题,本文将详细介绍如何使用SpringBoot+SpringSecurity处理Ajax登录请求问题。 知识点1:SpringBoot+SpringSecurity框架简介 ...

    spring-security 官方文档 中文版

    通过上述介绍,我们了解了 Spring Security 的基本概念、配置方法以及其实现细节,这对于开发者来说是非常宝贵的知识。无论是构建企业级应用还是个人项目,掌握 Spring Security 的使用都将极大地提升应用的安全性和...

    spring security 4.0.0所需jar包

    3. **spring-security-config**: - `spring-security-config-4.0.0.CI-SNAPSHOT-javadoc.jar`:配置模块的Java文档,帮助理解配置API。 - `spring-security-config-4.0.0.CI-SNAPSHOT.jar`:提供XML和注解配置,...

    spring security spring security

    spring security spring security 中文文档

Global site tag (gtag.js) - Google Analytics