How requests are authorized?
The final servlet filter in the default Spring Security filter chain, FilterSecurityInterceptor, is the filter responsible for coming up with a decision on whether or not a particular request will be accepted or denied. At this point the FilterSecurityInterceptor filter is invoked, the principal has already been authenticated, so the system knows that they are valid users. Remember that the Authentication interface specifies a method (List<GrantedAuthority> getAuthorities()), which returns a list of authorities for the principal. The authorization process will use the information from this method to determine, for a particular request, whether or not the request should be allowed.
在默认的Spring Security filter链中,最后的servlet filter是FilterSecurityInterceptor,它是负责处理这个特殊的request是否被通过。在这种情况下FilterSecurityInterceptor被触发,而且principal已经被验证,所以系统知道他们是可用的用户。我们知道Authentication接口指定了一个方法(List<GrantedAuthority> getAuthorities()),它返回authorities的数组。授权程序就会用这些信息来决定一个特殊的请求会不会被通过。
Smart object-oriented design is pervasive within the Spring Security framework, and authorization decision management is no exception. Recall from our discussion earlier in the chapter that a component known as the
access decision manager is responsible for making authorization determinations.
The implementation of AccessDecisionManager is completely configurable using standard Spring Bean binding and references. The default AccessDecisionManager implementation provides
an access granting mechanism based on AccessDecisionVoter and vote aggregation.
A
voter is an actor in the authorization sequence whose job is to evaluate any or all of the following:
The context of the request for a secured resource (such as URL requesting
IP address)
The credentials (if any) presented by the user
The secured resource being accessed
The configuration parameters of the system, and the resource itself
As you may have guessed from the design of access decision-related objects and interfaces, this portion of Spring Security has been designed so that it can be applicable to authentication and access control scenarios that aren't exclusively in the web domain. We'll encounter voters and access decision managers when we look at method-level security in Chapter 5, Fine-Grained Access Control.
When we put this all together, the overall flow of the "default authentication check for web requests" is similar to the following diagram:
注意上面是loop voters
Configuration of access decision aggregation
Spring Security does actually allow configuration of the AccessDecisionManager in the security namespace. The access-decision-manager-ref attribute on the <http> element allows you to specify a Spring Bean reference to an implementation of AccessDecisionManager. Spring Security ships with three implementations of this interface, all in the o.s.s.access.vote package:
第一个有一个同意就通过;第二个票数多的通过;第三全得通过才能通过。
Configuring to use a UnanimousBased access decision manager
If we want to modify our application to use the UnanimousBased access decision manager, we'd require two modifications. Let's add the access-decision-manager-ref attribute to the <http> element:
如果我们想用UnanimousBased Manager,我们需要修改两个地方。首先添加access-decision-manager-ref元素:
<http auto-config="true" access-decision-manager-ref="unanimousBased">
This is a standard Spring Bean reference, so this should correspond to the id attribute of a bean. We'll go on and declare the bean (in dogstore-base.xml) now, with the same ID we referenced:
这是一个标准Spring Bean,所以他应该对应一个bean id。现在我们声明这个bean:
<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"/>
You may be wondering what the decisionVoters property is about. This property is auto-configured until we declare our own AccessDecisionManager. The default AccessDecisionManager requires us to declare the list of voters who are consulted to arrive at the authentication decisions. The two voters listed here are the defaults supplied by the security namespace configuration.
你或许会奇怪decisionVoters是干什么的。当我们声明了AccessDecisionManager的时候,这个属性是自动装配的。默认的AccessDecisionManager要求我们声明一个系列的voter,用它们来决定是否验证通过。这里列出的两个voter是spring默认提供的。
Unfortunately, Spring Security doesn't come supplied with a wide variety of voters, but it is trivial to implement the AccessDecisionVoter interface and add our own implementation. We'll see an example of this in Chapter 6.
不幸的是Spring Security没有为我们提供需要不同的voter实现,但是我们可以实现AccessDecisionVoter来添加我们的实现。
The two voter implementations that we reference here do the following:
- 大小: 65.9 KB
- 大小: 31.2 KB
- 大小: 66.1 KB
分享到:
相关推荐
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...
对Security基本执行过程的分析和各个环节类执行的分析。
可能是使用Draw.io绘制的SpringSecurity架构图或流程图,帮助可视化理解SpringSecurity的工作原理。 总之,SpringSecurity为开发者提供了强大的安全工具,通过灵活的配置和丰富的扩展性,能够满足各种复杂的Web...
在本“springsecurity前端素材”中,我们有两个主要的文件夹:templates和static,它们分别代表了前端展示层的不同方面。 **templates** 文件夹通常包含了应用的HTML模板文件,这些文件被用于构建用户界面。在...
其实这些都不是问题,为了帮助学生理清思路把抽象的东西变的更加具体,我用Freemind 画了一幅Spring Security的一个整体概况图,从大的方向列出了配置一个Spring Security需要的一些东西,包括如何配置,配置文件中...
《基于SpringSecurity的图书借阅系统源代码》是一款利用SpringSecurity框架实现的图书管理与借阅功能的应用系统。SpringSecurity是Java领域内广泛使用的安全框架,它为应用程序提供了全面的安全控制,包括认证、授权...
该图是作者在分析SpringSecurity框架源代码之后梳理出来的Spring Security框架得启动原理图,即SpringSecurity是如何获取过滤器参数配置并调用相应的过滤器的;
知识点一:Spring Security验证码登录功能的实现原理 Spring Security的验证码登录功能是基于Java的图形验证码技术实现的。该技术生成一个随机的验证码图片,用户需要输入正确的验证码以完成登录。这样可以防止...
1. **开场简单介绍**:简要介绍 Spring Security 的核心组件及其工作原理。 2. **配置 CAS Filter**:Spring Security 需要配置 CAS Filter 来处理与 CASServer 的通信。主要步骤包括: - **引入 CAS Filter**:在...
- 通过阅读源码,我们可以深入理解Spring Security的工作原理,了解它是如何处理请求、认证和授权的,这对于定制和扩展框架非常有帮助。 8. **工具支持** - IDE插件:如Spring Tool Suite (STS) 可以提供对Spring...
Spring Security 是一个强大的安全框架,它为Java应用程序提供了全面的安全管理解决方案。而OAuth2则是一种开放标准,用于授权第三方应用访问用户的数据。在前后端分离的架构中,OAuth2常常用于处理用户登录验证,...
SpringBoot + SpringSecurity 短信验证码登录功能实现 本文主要介绍了 SpringBoot + SpringSecurity 短信验证码登录功能实现的详细过程,该功能可以使用户通过手机短信验证码登录系统,而不是传统的用户名密码登录...
综上所述,这个项目结合了Acticiti7的工作流能力、BPMN-JS的流程建模可视化及SpringSecurity的安全保障,构建了一个功能齐全且易于维护的Web工作流管理系统。通过深入理解Acticiti7的工作原理、BPMN-JS的绘图机制...
理解Spring Web Flow 2的源码可以帮助开发者深入理解其工作原理,从而更好地设计和实现复杂的页面流程。源码中包含了各种核心组件,如FlowExecutor、StateMachine以及Action和Transition的实现。通过阅读源码,我们...
在事务管理方面,Spring提供了编程式和声明式两种事务管理方式,书中有详细的解释和示例,帮助读者理解何时及如何选择合适的方式。 安全是任何应用都需要考虑的问题,Spring Security提供了一套全面的安全解决方案...
《Spring 安全3》是一本深入探讨Spring Security框架的专业图书,主要针对Java开发者和对安全领域感兴趣的IT人士。Spring Security是Spring生态系统中的一个核心组件,它为Java应用程序提供了全面的安全管理解决方案...
本篇文章将详细讲解基于Spring、SpringMVC、MyBatis、SpringSecurity、EhCache和JCaptcha这六大组件构建的Web框架。 1. **Spring**: Spring作为整个框架的核心,提供了依赖注入(DI)和面向切面编程(AOP)等特性...
Spring框架是中国乃至全球...结合图片截图,可以更直观地理解Spring的组件和工作原理,有助于快速掌握和应用Spring框架。同时,持续关注Spring的更新日志,可以确保我们的技能与时俱进,适应不断变化的软件开发环境。
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》是一本专注于Spring框架的高级参考书籍,面向对Spring有深入了解需求的Java开发者。书中不仅介绍了Spring框架的基本概念和原理,更深入到Spring框架内部,...