先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但是我希望我下面的只言片语能够把它说清楚。大家都知道,如果要对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOP。Acegi对Web资源的保护,就是靠Filter实现的。如下图:
一般来说,我们的Filter都是配置在web.xml中,但是Acegi不一样,它在web.xml中配置的只是一个代理,而真正起作用的Filter是作为Bean配置在Spring中的。web.xml中的代理依次调用这些Bean,就实现了对Web资源的保护,同时这些Filter作为Bean被Spring管理,所以实现AOP也很简单,真的是一举两得啊。
Acegi中提供的Filter不少,有十多个,一个一个学起来比较复杂。但是对于我们Web开发者来说,常用的就那么几个,如下图中的被红圈圈标记出来的:
从上到下,它们实现的功能依次是1、制定必须为https连接;2、从Session中提取用户的认证信息;3、退出登录;4、登录;5、记住用户;6、所有的应用必须配置这个Filter。
一般来说,我们写Web应用只需要熟悉这几个Filter就可以了,如果不需要https连接,连第一个也不用熟悉。但是有人肯定会想,这些Filter怎么和我的数据库联系起来呢?不用着急,这些Filter并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图:
对于这两种管理器,那也是不需要我们写代码的,Acegi也提供了现成的类。那么大家又奇怪了:又是现成的,那怎么和我的数据库关联起来呢?别着急,其实这两个管理器自己也不做事,认证管理器把任务交给了Provider,而决策管理器则把任务交给了Voter,如下图:
现在我要告诉你们,这里的Provider和Voter也是不需要我们写代码的。不要崩溃,快到目标了。Acegi提供了多个Provider的实现类,如果我们想用数据库来储存用户的认证数据,那么我们就选择DaoAuthenticationProvider。对于Voter,我们一般选择RoleVoter就够用了,它会根据我们配置文件中的设置来决定是否允许某一个用户访问制定的Web资源。
而DaoAuthenticationProvider也是不直接操作数据库的,它把任务委托给了UserDetailService,如下图:
插入一些相关教程
2) httpSessionContextIntegrationFilter
每次 request前 HttpSessionContextIntegrationFilter从Session中获取Authentication对象,在request完 后, 又把Authentication对象保存到Session中供下次request使用,此filter必须其他Acegi filter前使用,使之能跨越多个请求。
<bean id="httpSessionContextIntegrationFilter"
class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
</bean>
3) basicProcessingFilter
用于处理HTTP头的认证信息,如从 Spring远程协议(如Hessian和Burlap)或普通的浏览器如IE,Navigator的HTTP头中获取用户信息,将他们转交给通过 authenticationManager属性装配的认证管理器。如果认证成功,会将一个Authentication对象放到会话中,否则,如果认证 失败,会将控制转交给认证入口点(通过authenticationEntryPoint属性装配)
<bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />
</bean>
4) basicProcessingFilterEntryPoint
通过向浏览器发送一个HTTP401(未授权)消息,提示用户登录。
处理基于HTTP的授权过程, 在当验证过程出现异常后的"去向",通常实现转向、在response里加入error信息等功能。
<bean id="basicProcessingFilterEntryPoint"
class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
<property name="realmName" value="Acegi First Realm Name" />
</bean>
其中,realmName属性取值并不存在太多的实际含义,运行时,”Acegi First Realm Name“字符串会显示在IE浏览器弹出的HTTP BASIC认证对话框中。
5) exceptionTranslationFilter
异常转换过滤器,主要是处理AccessDeniedException和AuthenticationException,将给每个异常找到合适的"去向"
<bean id="exceptionTranslationFilter"
class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint" />
</bean>
在此,如果认证不通过将会将控制转交给认证入口点(通过authenticationEntryPoint属性装配)
6) authenticationManager
起到认证管理的作用,它将验证的功能委托给多个 Provider,并通过遍历Providers, 以保证获取不同来源的身份认证,若某个Provider能成功确认当前用户的身份,authenticate()方法会返回一个完整的包含用户授权信息的 Authentication对象,否则会抛出一个AuthenticationException。
Acegi提供了不同的AuthenticationProvider的实现,如:
DaoAuthenticationProvider 从数据库中读取用户信息验证身份
AnonymousAuthenticationProvider 匿名用户身份认证
RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证
AuthByAdapterProvider 使用容器的适配器验证身份
CasAuthenticationProvider 根据Yale中心认证服务验证身份, 用于实现单点登陆
JaasAuthenticationProvider 从JASS登陆配置中获取用户信息验证身份
RemoteAuthenticationProvider 根据远程服务验证用户身份
RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证
X509AuthenticationProvider 从X509认证中获取用户信息验证身份
TestingAuthenticationProvider 单元测试时使用
每个认证者会对自己指定的证明信息进行认证,如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。
<bean id="authenticationManager"
class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>
相关推荐
在 `HelloSpringSecurity` 文件中,你可能看到以下关键代码: - **WebSecurityConfigurerAdapter** 类:这是 Spring Security 提供的配置适配器,可以覆盖其方法来定制安全规则。 - `configure(HttpSecurity http)...
**Spring Security 入门实例详解** Spring Security 是一个强大的安全框架,用于保护...通过学习这个实例,你将对 Spring Security 有一个基础的认识,并能将其应用到实际项目中,为你的 Web 应用构建稳固的安全防护。
总的来说,理解并掌握Spring Security的权限管理机制,需要对`UserDetails`接口、配置文件的解析以及数据库交互有深入的认识。通过自定义用户实体、配置安全规则以及实现数据访问层,我们可以构建出满足业务需求的...
通过这个项目,初学者不仅能掌握SpringBoot的基础应用,还能深入理解SpringSecurity的权限控制机制,同时对JWT的原理和使用有了直观的认识。实践过程中,还需要了解数据库操作、HTTP协议、JSON格式等相关知识,对...
- 在web.xml中配置DelegatingFilterProxy来代理SpringSecurity中的核心部分过滤器,以及如何让这些过滤器获得Spring的webApplicationContext生命周期支持。 - 在Spring配置文件中引入SpringSecurity命名空间,并进行...
通过本文的学习,相信读者已经对Spring Security有了较全面的认识,并具备了将其应用于实际项目的能力。未来,随着技术的发展和安全威胁的变化,Spring Security也会持续更新和完善,为开发者提供更多有力的支持。
Spring Security是Java EE应用中广泛使用的一个安全框架,旨在为基于Spring的应用程序提供全面的安全保障。它提供了全面、可配置的安全...这些知识点有助于读者全面认识Spring Security框架,并引导读者进行系统学习。
【标题】"Spring Boot + MyBatis + Security 登陆查询数据库验证"是一个初学者友好的实战项目,旨在演示如何在Spring Boot应用中整合MyBatis作为持久层框架,并利用Spring Security进行用户身份验证。这个项目涵盖了...
1. **Spring概述**:首先介绍Spring的发展历程、核心理念以及在现代软件开发中的地位,让读者对Spring有一个整体的认识。 2. **环境配置**:详细阐述如何搭建Spring开发环境,包括安装JDK、设置开发工具(如IDEA或...
除了上述内容,书中的案例涵盖了Spring的应用上下文、Bean的生命周期管理、Spring的测试支持以及Spring与其他技术的整合,如Spring Security(安全框架)、Spring Batch(批量处理)等。这些章节旨在让读者全面掌握...
通过学习以上知识点,并结合提供的"spring思维导图",读者可以更好地构建对Spring的整体认识,理解其设计理念,提升在实际项目中的应用能力。在实践中不断探索,Spring的奥秘会逐步揭示,成为你开发路上的强大助手。
通过学习这部分内容,读者可以建立起对Spring框架的整体认识,为后续的深入学习和实践打下坚实的基础。而"Spring揭秘部分2"和"Spring揭秘部分3"则可能进一步探讨Spring的其他模块和高级特性,如Spring Boot、Spring ...
通过学习这个"Spring4框架系列[ 1 ]",初学者可以建立起对Spring框架的基本认识,并逐步掌握如何在实际项目中利用Spring进行高效开发。后续章节可能会深入讲解更多高级特性,如数据访问集成、事务管理、Spring Boot...
"spring-framework-reference"文档中详细介绍了Spring的核心特性,包括Bean的声明和管理、Spring MVC的使用、数据访问支持(如JDBC、Hibernate集成)以及Spring的其他模块,如Spring Boot和Spring Security。...
通过这份入门培训,读者应该能建立起对Spring Boot和ExtJS6.2的基础认识,掌握创建简单Web应用的能力,并能进行基本的调试和测试。源代码的提供则为学习者提供了动手实践的机会,有助于理论与实践的结合,加深理解。
在本教程中,我们将深入探讨"Spring简单项目源码(一)",这是一个专为初学者设计的示例,旨在帮助他们理解Spring...随着学习的深入,还可以探索Spring的更多高级特性,如Spring Boot、Spring Data、Spring Security等。
Spring框架是Java开发中的核心组件,它为应用...通过观看并实践教程中的示例,你将对Spring有更全面、深入的认识,从而在工作中更加得心应手。记得通过提供的百度网盘链接下载学习资源,以便随时回顾和巩固所学知识。
1. **框架概述**:介绍renren-security的设计理念、架构和主要特性,帮助读者建立对框架的整体认识。 2. **快速入门**:提供一个快速启动项目的基础配置,包括Maven依赖、配置文件的设置,以及如何创建第一个安全...