- 浏览: 446892 次
- 性别:
- 来自: 大连
博客专栏
-
《Spring Secur...
浏览量:379392
文章分类
最新评论
-
蒙奇君杰:
必须感谢一番!!!愿开源的态度为更多的人所拥有,所 认同!
关于对《Spring Security3》一书的翻译说明 -
601235723:
bbjavaeye 写道你好,有个问题请教一下我配了<b ...
《Spring Security3》第四章第一部分翻译下(自定义的UserDetailsService) -
bay0902:
中国互联网的脊梁
Spring Security 3全文下载 -
hdcustc:
项目源码下载 微博网盘里的那个依赖文件损坏了啊 能否提供个可 ...
Spring Security 3全文下载 -
i641878506:
楼主辛苦, 可以提供原书的原项目文件的下载么
Spring Security 3全文下载
请求是怎样被授权的?
在Spring Security的默认过滤器链中,最后一个servelt过滤器是FilterSecurityInterceptor,它的作用是判断一个特定的请求是被允许还是被拒绝。在FilterSecurityInterceptor被触发的时候,安全实体已经经过了认证,所以系统知道他们是合法的用户。(其实也有可能是匿名的用户,译者注)。请记住的一点是,Authentication提供了一个方法((List<GrantedAuthority>
getAuthorities()),将会返回当前安全实体的一系列权限列表。授权的过程将使用这个方法提供的信息来决定一个特定的请求是否会被允许。
需要记住的是授权是一个二进制的决策——一个用户要么有要么没有访问一个受保护资源的权限。在授权中,没有模棱两可的情景。
在Spring Security中,良好的面向对象设计随处可见,在授权决策管理中也不例外。回忆一下我们在本章前面的讨论,一个名为访问控制决策器(access decision manager)的组件负责作出授权决策。
在Spring Security中,o.s.s.access.AccessDecisionManager接口定义了两个简单而合理的方法,它们能够用于请求的决策判断流程:
<!--[if !supportLists]-->l <!--[endif]-->supports:这个逻辑操作实际上包含两个方法,它们允许AccessDecisionManager的实现类判断是否支持当前的请求。
<!--[if !supportLists]-->l <!--[endif]-->decide:基于请求的上下文和安全配置,允许AccessDecisionManager去核实访问是否被允许以及请求是否能够被接受。decide方法实际上没有返回值,通过抛出异常来表明对请求访问的拒绝。
与AuthenticationException及其子类在认证过程中的使用很类似,特定类型的异常能够表明应用在授权决策中的不同处理结果。o.s.s.access.AccessDeniedException是在授权领域里最常见的异常,因此值得过滤器链进行特殊的处理。我们将在第六章中详细介绍它的高级配置。
AccessDecisionManager是能够通过标准的Spring bean绑定和引用实现完全的自定义配置。AccessDecisionManager的默认实现提供了一个基于AccessDecisionVoter接口和投票集合的授权机制。
投票器(voter)是在授权过程中的一个重要角色,它的作用是评估以下的内容:
<!--[if !supportLists]-->l <!--[endif]-->要访问受保护资源的请求所对应上下文(如URL请求的IP地址);
<!--[if !supportLists]-->l <!--[endif]-->用户的凭证信息(如果存在的话);
<!--[if !supportLists]-->l <!--[endif]-->要试图访问的受保护资源;
<!--[if !supportLists]-->l <!--[endif]-->系统的配置以及要访问资源本身的配置参数。
AccessDecisionManager还会负责传递要请求资源的访问声明信息(在代码中为ConfigAttribute接口的实现类)给投票器。在web URL的请求中,投票器将会得到资源的访问声明信息。如果看一下我们配置文件中非常基础的拦截声明,我们能够看到ROLE_USER被设置为访问配置并用于用户试图访问的资源:
<intercept-url pattern="/*" access="ROLE_USER"/> |
投票器将会对用户是否能够访问指定的资源做出一个判断。Spring Security允许过滤器在三种决策结果中做出一种选择,它们的逻辑定义在o.s.s.access.AccessDecisionVoter接口中通过常量进行了定义。
决策类型 |
描述 |
Grant (ACCESS_GRANTED) |
投票器允许对资源的访问 |
Deny (ACCESS_DENIED) |
投票器拒绝对资源的访问 |
Abstain (ACCESS_ABSTAIN) |
投票器对是否能够访问做了弃权处理(即没有做出决定)。可能在多种原因下发生,如: <!--[if !supportLists]-->l <!--[endif]-->投票器没有确凿的判断信息; <!--[if !supportLists]-->l <!--[endif]-->投票器不能对这种类型的请求做出决策。 |
正如你从访问决策相关类和接口的设计中可以猜到的那样,Spring Security的这部分被精心设计,所以认证和访问控制的使用场景并不仅仅限于web领域。我们将会在:精确的访问控制中关于方法级别的安全时,再次讲解投票器和访问控制管理。
当将他们组合在一起,“对web请求的默认认证检查”的整体流程将如下图所示:
我们可以看到ConfigAttribute能够从配置声明(在DefaultFilterInvocationSecurityMetadataSource类中保存)中传递数据到投票器,投票器并不需要其他的类来理解ConfigAttribute的内容。这种分离能够为新类型的安全声明(例如我们将要看到的方法安全声明)使用相同的访问决策模式提供基础。
配置access decision集合
实际上Spring Security允许通过security命名空间来配置AccessDecisionManager。<http>元素的access-decision-manager-ref属性来指明一个实现了AccessDecisionManager的Spring Bean。Spring Security提供了这个接口的三个实现类,都在o.s.s.access.vote包中:
类名 |
描述 |
AffirmativeBased |
如果有任何一个投票器允许访问,请求将被立刻允许,而不管之前可能有的拒绝决定。 |
ConsensusBased |
多数票(允许或拒绝)决定了AccessDecisionManager的结果。平局的投票和空票(全是弃权的)的结果是可配置的。 |
UnanimousBased |
所有的投票器必须全是允许的,否则访问将被拒绝。 |
配置使用UnanimousBased的访问决策管理器(access decision manager)
如果你想修改我们的应用来使用UnanimousBased访问决策管理器,我们需要修改两个地方。首先让我们在<http>元素上添加access-decision-manager-ref属性:
<http auto-config="true" access-decision-manager-ref="unanimousBased" > |
这是一个标准的Spring Bean的引用,所以这需要对应一个bean的id属性。接下来,我们要定义这个bean(在dogstore-base.xml中),并与我们引用的有相同的id:
<bean class="org.springframework.security.access.vote.UnanimousBased" id="unanimousBased"> <property name="decisionVoters"> <list> <ref bean="roleVoter"/> <ref bean="authenticatedVoter"/> </list> </property> </bean> <bean class="org.springframework.security.access.vote.RoleVoter" id="roleVoter"/> <bean class="org.springframework.security.access.vote. AuthenticatedVoter" id="authenticatedVoter"/> |
你可能象知道decisionVoters属性是什么。这个属性在我们不声明AccessDecisionManager时,是自动配置的。默认的AccessDecisionManager要求我们配置投票器的一个列表,它们将会在认证决策时用到。这里列出的两个投票器是security命名空间配置默认提供的。
遗憾的是,Spring Security没有为我们提供太多的投票器,但是实现AccessDecisionVoter接口并在配置中添加我们的实现并不是一件困难的事情。我们将在第六章看一个例子。
我们引用的两个投票器介绍如下:
类名 |
描述 |
例子 |
o.s.s.access. vote.RoleVoter |
检查用户是否拥有声明角色的权限(GrantedAuthority)。access属性定义了GrantedAuthority的一个列表。预期会有ROLE_前缀,但这也是可配置的。 |
access="ROLE_USER,ROLE_ADMIN" |
o.s.s.access. vote.AuthenticatedVoter |
支持特定类型的声明,允许使用通配符: <!--[if !supportLists]-->l <!--[endif]-->IS_AUTHENTICATED_FULLY——允许提供完整的用户名和密码的用户访问; <!--[if !supportLists]-->l <!--[endif]-->IS_AUTHENTICATED_REMEMBERED——如果用户是通过remember me功能认证的则允许访问; <!--[if !supportLists]-->l <!--[endif]-->IS_AUTHENTICATED_ANONYMOUSLY——允许匿名用户访问。 |
access=" IS_AUTHENTICATED_ANONYMOUSLY" |
评论
下次发的时候注意,晚上我再把已发的修改一下
发表评论
-
Spring Security 3全文下载
2012-03-15 20:31 20107本书已经翻译完成,提供给大家下载 以下地址为ITEYE的电子 ... -
《Spring Security3》附录翻译(参考资料)
2012-02-13 22:58 6412附录:参考材料 在本附录中, ... -
《Spring Security3》第十三章翻译(迁移到Spring Security 3)
2012-02-13 22:50 5187第十三章 迁移到Spring Security 3 ... -
《Spring Security3》第十二章翻译(Spring Security扩展)
2012-02-13 22:38 7793第十二章 Spring Security扩展 ... -
《Spring Security3》第十一章(客户端证书认证)第二部分翻译
2012-02-13 22:23 4761在Spring Security中配置客户端证书认证 ... -
《Spring Security3》第十一章(客户端证书认证)第一部分翻译
2012-02-13 22:00 6118第十一章 客户端证书认证(Client Cert ... -
《Spring Security3》第十章(CAS)第二部分翻译(CAS高级配置)
2012-01-19 13:07 8572高级CAS配置 ... -
《Spring Security3》第十章(CAS)第一部分翻译(CAS基本配置)
2012-01-19 12:54 12217第十章 使用中心认证服务(CAS)进行单点登录 ... -
《Spring Security3》第九章(LDAP)第三部分翻译(LDAP明确配置)
2012-01-19 12:44 6379明确的LDAP bean配置 ... -
《Spring Security3》第九章(LDAP)第二部分翻译(LDAP高级配置)
2012-01-19 12:36 7080LDAP的高级配置 一旦我们 ... -
《Spring Security3》第九章(LDAP)第一部分翻译(LDAP基本配置)
2012-01-19 12:22 6100第九章 LDAP目录服务 在本章中,我们 ... -
《Spring Security3》第八章第三部分翻译(属性交换)
2012-01-18 15:46 2871属性交换(Attribute Exchange) ... -
《Spring Security3》第八章第二部分翻译(OpenID用户的注册)
2012-01-18 13:39 5315OpenID用户的注册问 ... -
《Spring Security3》第八章第一部分翻译(OpenID与Spring Security)
2012-01-17 22:38 7498第八章 对OpenID开放 OpenID是 ... -
《Spring Security3》第七章第三部分翻译(ACL的注意事项)
2012-01-17 22:25 2651典型ACL部署所要考虑的事情 ... -
《Spring Security3》第七章第二部分翻译(高级ACL)(下)
2012-01-17 22:17 4139支持ACL的Spring表达式语言 SpEL对A ... -
《Spring Security3》第七章第二部分翻译(高级ACL)(上)
2012-01-10 22:59 4565高级ACL话题 一些高级的话 ... -
《Spring Security3》第七章第一部分翻译(访问控制列表ACL)
2011-12-30 22:02 9436第七章 访问控制列表(ACL) 在本章中, ... -
《Spring Security3》第六章第七部分翻译(认证事件处理与小结)
2011-11-22 22:37 5368认证事件处理 有一个重要的功能只能通 ... -
《Spring Security3》第六章第六部分翻译(Spring Security基于bean的高级配置)
2011-11-22 22:25 5382Spring Security基于bean的高级配置 ...
相关推荐
第二章:springsecurity起步 第三章:增强用户体验 第四章:凭证安全存储 第五章:精确的访问控制 第六章:高级配置和扩展 第七章:访问控制列表(ACL) 第八章:对OpenID开放 第九章:LDAP目录服务 第十章:使用...
NULL 博文链接:https://lengyun3566.iteye.com/blog/1104456
第3章 Spring中的Bean配置 3.1 在Spring IoC容器里配置Bean 3.1.1 问题描述 3.1.2 解决方案 3.1.3 实现方法 3.2 实例化Spring IoC容器 3.2.1 问题描述 3.2.2 解决方案...
第3章 Spring中的Bean配置 3.1 在Spring IoC容器里配置Bean 3.1.1 问题描述 3.1.2 解决方案 3.1.3 实现方法 3.2 实例化Spring IoC容器 3.2.1 问题描述 3.2.2 解决方案...
第3章 Spring中的Bean配置 3.1 在Spring IoC容器里配置Bean 3.1.1 问题描述 3.1.2 解决方案 3.1.3 实现方法 3.2 实例化Spring IoC容器 3.2.1 问题描述 3.2.2 解决方案 ...
第二章 Spring Security起步................................................................................................ 15 安全的核心概念 .............................................................
第3章 Spring AOP和AspectJ支持 112 3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案...
第3章 Spring AOP和AspectJ支持 112 3.1 启用Spring的AspectJ注解支持 113 3.1.1 问题 113 3.1.2 解决方案 113 3.1.3 工作原理 113 3.2 用AspectJ注解声明aspect 115 3.2.1 问题 115 3.2.2 解决方案...
第二部分 企业Spring 第5章 使用数据库 5.1 Spring的数据访问哲学 5.1.1 了解Spring数据访问的异常体系 5.1.2 数据访问的模板化 5.1.3 使用DAO支持类 5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源...
第二部分 企业Spring 第5章 使用数据库 5.1 Spring的数据访问哲学 5.1.1 了解Spring数据访问的异常体系 5.1.2 数据访问的模板化 5.1.3 使用DAO支持类 5.2 配置数据源 5.2.1 使用JNDI数据源 5.2.2 使用数据源...
第3章高级bean装配 3.1声明父bean和子bean 3.1.1抽象基bean类型 3.1.2抽象共同属性 3.2方法注入 3.2.1基本的方法替换 3.2.2获取器注入 3.3注入非springbean 3.4注册自定义属性编辑器 3.5使用spring的特殊...
Spring Cloud包含了多个子项目(针对分布式系统中涉及的多个不同开源产品),比如:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring ...
第3 章 Spring 高级话题 48 3.1 Spring Aware 48 3.1.1 点睛 48 3.1.2 示例 49 3.2 多线程 51 3.2.1 点睛 51 3.2.2 示例 51 3.3 计划任务 54 3.3.1 点睛 54 3.3.2 示例 54 3.4 条件注解@Conditional 56 3.4.1 点睛 ...
第3 章 Spring 高级话题 .... ............................ 48 3.1 Spring Aware .... ..................................... 48 3.2 多线程 .... .... ......... 51 3.3 计划任务 .... .... ..... 54 3.4 条件...
第3 章 Spring 高级话题 .... ............................ 48 3.1 Spring Aware .... ..................................... 48 3.2 多线程 .... .... ......... 51 3.3 计划任务 .... .... ..... 54 3.4 条件...
第3 章 Spring 高级话题 48 3.1 Spring Aware 48 3.1.1 点睛 48 3.1.2 示例 49 3.2 多线程 51 3.2.1 点睛 51 3.2.2 示例 51 3.3 计划任务 54 3.3.1 点睛 54 3.3.2 示例 54 3.4 条件注解@Conditional 56 3.4.1 点睛 ...
第3 章 Spring 高级话题 48 3.1 Spring Aware 48 3.1.1 点睛 48 3.1.2 示例 49 3.2 多线程 51 3.2.1 点睛 51 3.2.2 示例 51 3.3 计划任务 54 3.3.1 点睛 54 3.3.2 示例 54 3.4 条件注解@Conditional 56 3.4.1 点睛 ...
66 第二部分 点睛Spring MVC 4.x 第4 章 Spring MVC 基础 .... .......................... 72 第三部分 实战Spring Boot 第5 章 Spring Boot 基础 .... ......................... 122 第6 章 Spring Boot 核心 .....
第二章 通过体脂计算器(BMI)项目,掌握使用Maven生成Springboot工程,Angular与Springboot的协作机制、从而理解前后端分别架构的实现方法。 第三章 通过开发一个CMS系统,既网站内容管理系统,来掌握Springboot...
深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...