一、Acegi Security 介绍
1、为基于J2EE企业应用提供了全面安全服务
2003年年底——acegi开始,当时叫“spring的acegi安全系统”。
2006年5月——acegi1.0.0最终版本发布。
2007年年底——成为spring组合项目,更名“Spring Security”。
2009年7月——Spring Security 3.0已经发布
2010年7月——Spring Security 3.1已经发
3、安全原理
安全包括认证授权两个主要操作。
“认证”是为用户建立一个他所声明的主体。主体一般是指用户,设备或可以在你系统中执行行动的其他系统。
“授权”指的一个用户能否在你的应用中执行某个操作。在到达授权判断之前,身份的主体已经由身份验证过程建立了。
这些概念是通用的,不是Spring Security特有的。
Spring Acegi拥有丰富灵活的认证模型,列举几个认证技术:
HTTP BASIC authentication headers (一个基于IEFT RFC的标准)
LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境)
JA-SIG Central Authentication Service (也被称为CAS,这是一 个流行的开源单点登录系统)
Java Authentication and Authorization Service (JAAS)
Form-based authentication (提供简单用户接口的需求)
Spring Acegi在授权方面主要有三个领域
乘飞机前需要通过安检,乘客必须提供身份证以验证其身份。在通过安检进入候机室后,国航、海航、南航等不同航空公司的飞机陆续到达,但你只能登上机票上对应航班的飞机。在登机后,只能坐在机票对应的座位上——你不能抢占他人的座位,你不能在座位上刻字留念、你不能要求空姐打开机窗……
乘飞机的过程体现安全控制的流程:
安检--身份认证
登机--资源访问控制
按号就座—领域对象安全控制
2、Acegi架构
Acegi通过两个组件对象完成安全问题的处理:
AuthenticationManager(认证管理器)
AccessDecisionManager(访问控制管理器或者叫授权管理器)
在Acegi框架中,SecurityContextHolder处于非常核心的位置,它是存放认证管理器用户安全信息SecurityContext的“容器”, SecurityContext保存着用户安全访问控制所需的信息,直接被访问决策管理器使用。
HttpSessionContextIntegrationFilter通过在SecurityContextHolder和HttpSession中摆渡SecurityContext,使多个请求线程可以共享同一SecurityContext。
3、Acegi实现以filter为中心
用户认证过程
Acegi支持多种方式的用户认证:如典型的基于数据库的认证、基于LDAP的认证等。先抛开细节,看一下Acegi对受限资源进行访问控制的典型过程:
1.你点击一个链接访问一个网页;
2.浏览器发送一个请求到服务器,服务器判断出你正在访问一个受保护的资源;
3.如果此时你并未通过身份认证,服务器发回一个响应提示你进行认证——这个响应可能是一个HTTP响应代码,抑或重定向到一个指定页面;
4.根据系统使用认证机制的不同,浏览器或者重定向到一个登录页面中,或者由浏览器通过一些其它的方式获取你的身份信息(如通过BASIC认证对话框、一个Cookie);
5.浏览器再次将用户身份信息发送到服务器上(可能是一个用户登录表单的HTTP POST信息、也可能是包含认证信息的HTTP报文头);
6.服务器判断用户认证信息是否有效,如果无效,一般情况下,浏览器会要求你继续尝试,这意味着返回第3步。如果有效,则到达下一步;
7.服务器重新响应第2步所提交的原始请求,并判断该请求所访问的程序资源是否在你的权限范围内,如果你有权访问,请求将得到正确的执行并返回结果。否则,你将收到一个HTTP 403错误,这意味着你被禁止访问。
授权过程
Acegi称受保护的应用资源为“安全对象”,这包括URL资源和业务类方法。spring AOP中有前置advice(处理、拦截器、通知)、后置advice、异常advice和环绕advice 。Acegi使用环绕advice对安全对象进行保护。 Acegi通AbstractSecurityInterceptor为安全对象访问提供一致的工作模型,它按照以下流程进行工作:
1. 从SecurityContext中取出已经认证过的Authentication(包括权限信息);
2. 通过反射机制,根据目标安全对象和“配置属性”得到访问目标安全对象所需的权限;
3. AccessDecisionManager根据Authentication的授权信息和目标安全对象所需权限做出是否有权访问的判断。如果无权访问,Acegi将抛出AccessDeniedException异常,否则到下一步;
4. 访问安全对象并获取结果(返回值或HTTP响应);
5. AbstractSecurityInterceptor可以在结果返回前进行处理:更改结果或抛出异常。
三、Acegi Security配置
1、基本环境配置
第一步确保jar文件放到正确的位置(/WEB-INF/lib/)
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetBean</param-name>
<param-value>filterChainProxy</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第三步applicationContext-security.xml文件的配置
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT /**=httpSessionContextIntegrationFilter,userPreferencesFilter,authenticationProcessingFilter </value>
</property>
</bean>
2、登录验证
3、方法保护
4、Domain Object安全(ACL)
ACL用来做细粒度权限控制所用的一种权限模型。具体到每一条数据的权限。保障Domain Object安全。
ACL最简单的描述——两个业务员每个人只能查看操作自己签的合同,而不能看到对方的合同信息。
最典型的ACL实现——操作系统(window, unix)的文件访问控制系统,精确定义了某个用户或角色对某个特定文件的读、写、执行等权限。
相关推荐
压缩包内包含了众多spring学习资料如:Spring从入门到精通.pdf ,spring+framework+2.5+reference_CN.chm, Acegi(spring_security)培训.ppt, spring事务.pdf,Spring_Framework-3-AOP.ppt,Spring-Hibernate_...
它最初是Acegi Security System for Spring的一个后继产品,提供了身份验证和授权机制,可以应用于Web层、方法层和访问服务层。 2. Spring Security的历史和版本: Spring Security的历史可以追溯到2003年,当时它...
它最初被称为Acegi Security,后来在Spring 2.0版本后被重命名为Spring Security。本教程将引导你入门Spring Security 3.x,帮助你理解如何设置和配置这个安全框架。 首先,我们需要创建一个Web项目并导入必要的库...
在 SpringSecurity电子书中,作者Ben Alex和Luke Taylor提供了对Spring Security的全面介绍,涵盖了从基本概念到高级特性以及如何配置和使用Spring Security的详细指南。 知识点一:Spring Security基础 1. Spring ...
Spring Security 最初是在 2004 年由 Ben Alex 开发的 Acegi Security System,随后被集成到 Spring Framework 中,并更名为 Spring Security。随着时间的发展,它逐渐成为企业级应用中不可或缺的安全解决方案。 ##...
Spring Security 的前身是Acegi Security,随着Spring框架的发展而逐渐演进,并最终成为Spring Security。自2.0.x版本以来,Spring Security 不断地进行改进和增强,以适应不断变化的安全需求。 **1.3. 发行版本号*...
Spring Security 的前身是 Acegi Security,在被纳入 Spring 项目之后,它经历了多个版本的迭代。Spring Security 3.0 是一个重要的里程碑,它引入了许多新特性,并且对原有的架构进行了优化。 **1.3 发行版本号** ...
Acegi Security起源于2003年,最初是作为Spring的扩展项目,称为"Spring的Acegi安全系统"。随着时间的推移,它逐渐成熟,并在2006年发布了1.0.0最终版本。2007年,Acegi成为Spring组合项目,并更名为"Spring ...
### Spring Security 3.0 入门与核心概念详解 #### 一、Spring Security简介 Spring Security 是一款功能强大且高度可定制的应用安全框架,它为基于 Java 的应用程序提供了全面的安全服务。尤其对于那些采用 ...
第一章的"HelloWorld"示例通常是一个简单的入门教程,旨在演示如何在Spring Security中设置基本的权限控制。在这个例子中,可能会涉及到定义用户、角色和权限,以及如何拦截和处理未授权的访问请求。通过配置URL过滤...
在Spring Security 3.x版本中,该框架经历了一次重大的更新,与之前的Acegi Security(已被Spring Security取代)以及Spring Security 2.x相比,有了一些显著的变化。 本入门教程将引导你逐步了解如何设置并运行一...
- **Spring Security** 的前身是Acegi Security,最初由Luke Taylor开发。 - **2006年**,Spring项目正式将其纳入,并更名为Spring Security。 - **不断发展**:随着Spring框架的发展,Spring Security也在不断...
- **背景:** Spring Security 的前身是 Acegi 安全框架,后来被 Spring 社区采纳并重新命名为 Spring Security。 - **发展:** 经过多个版本的迭代,Spring Security 已经成为 Spring 生态系统中最成熟的安全解决...
- **历史背景**:Spring Security最初被称为“Acegi Security System for Spring”,是由Ben Alex在2003年发起的项目。随着时间的发展,在Ben的带领下,它逐渐演变成一个成熟的、广泛应用于Spring Framework应用...
Spring Security 的前身是 Acegi 安全框架,在被 Spring 社区采纳后,经过不断发展和改进,成为了今天广泛使用的 Spring Security。自发布以来,Spring Security 不断进行版本更新,提供了更多的功能和更好的安全性...
Spring Security的前身是Acegi Security项目,随着Spring框架的发展逐渐演化成了现在的Spring Security。自发布以来,Spring Security不断更新和完善,以适应不断变化的安全需求和技术环境。 ##### 1.3 发布编号 ...
总结来说,"acegi入门demo"是一个展示如何在Spring应用中使用Acegi Security进行用户认证和授权的实例。它涉及到的关键概念包括`AuthenticationManager`、`AccessDecisionManager`、`FilterSecurityInterceptor`以及...
Spring Security 最初由 Ben Alex 创建,当时名为 Acegi Security System for Spring。随着时间的推移,该框架不断发展壮大,并逐渐成为了保护 Spring 应用的标准解决方案。Spring Security 3 的发布标志着框架进入...
在实际开发中,Spring MVC还可以与Spring Boot结合,简化项目初始化和配置,同时可以集成其他Spring生态中的组件,如MyBatis或JPA进行数据访问,Acegi或Spring Security进行权限管理,Spring Data JPA进行ORM操作等...