`
weisong0127
  • 浏览: 15792 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论

Acegi (Spring Security)入门

阅读更多
一、Acegi Security  介绍

    1、为基于J2EE企业应用提供了全面安全服务

l将系统的安全逻辑从业务中分离出来
l提供很多认证授权策略
l基于URL的WEB资源访问控制
l业务方法调用访问控制
l领域对象访问控制  Access Control List(ACL)
l单点登录(Central Authentication Service) 缓存、信道安全(Channel Security)管理等功能
2、Acegi发展历史
2003年初——Spring本身作为一个sourceforge的项目出现。
2003年年底——acegi开始,当时叫“spring的acegi安全系统”。

2006年5月—— acegi 1.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在授权方面主要有三个领域





l授权web请求

l授权被调用方法

l授权访问单个对象的实例


二 、Acegi Security  原理

1、 乘飞机的安全问题

乘飞机前需要通过安检,乘客必须提供身份证以验证其身份。在通过安检进入候机室后,国航、海航、南航等不同航空公司的飞机陆续到达,但你只能登上机票上对应航班的飞机。在登机后,只能坐在机票对应的座位上——你不能抢占他人的座位,你不能在座位上刻字留念、你不能要求空姐打开机窗……

  乘飞机的过程体现安全控制的流程:





安检--身份认证





登机--资源访问控制





按号就座—领域对象安全控制



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/)

•acegi-security-1.0.1.jar
•aopalliance-1.0.jar
•spring-2.0.2.jar
•等相关jar包
第二步,在web.xml文件里配置一个FilterToBeanProxy
<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)的文件访问控制系统,精确定义了某个用户或角色对某个特定文件的读、写、执行等权限。





 




lACL_READ指的是这个Voter对哪些SecurityConfig起作用。可以把ACL_READ配置在想要拦截的Method上。比方说要拦截readOrder这个方法,以实现ACL控制,可以这样配置orderManager.readOrder=ACL_READ
lprocessDomainObjectClass指出哪些DomainObject是要进行ACL校验的。
laclManager主要负责在权限列表根据用户和DomainObject取得acl列表。
lrequirePermission指出要进行这个操作必须具备的acl权限,比方说read操作就必须有ADMINISTRATION或READ两个权限
分享到:
评论

相关推荐

    spring 从入门到精通

    压缩包内包含了众多spring学习资料如:Spring从入门到精通.pdf ,spring+framework+2.5+reference_CN.chm, Acegi(spring_security)培训.ppt, spring事务.pdf,Spring_Framework-3-AOP.ppt,Spring-Hibernate_...

    spring security reference【洋文】

    它最初是Acegi Security System for Spring的一个后继产品,提供了身份验证和授权机制,可以应用于Web层、方法层和访问服务层。 2. Spring Security的历史和版本: Spring Security的历史可以追溯到2003年,当时它...

    spring-security入门

    它最初被称为Acegi Security,后来在Spring 2.0版本后被重命名为Spring Security。本教程将引导你入门Spring Security 3.x,帮助你理解如何设置和配置这个安全框架。 首先,我们需要创建一个Web项目并导入必要的库...

    springsecurity电子书

    在 SpringSecurity电子书中,作者Ben Alex和Luke Taylor提供了对Spring Security的全面介绍,涵盖了从基本概念到高级特性以及如何配置和使用Spring Security的详细指南。 知识点一:Spring Security基础 1. Spring ...

    Spring security 官网说明文档(英文版)

    Spring Security 最初是在 2004 年由 Ben Alex 开发的 Acegi Security System,随后被集成到 Spring Framework 中,并更名为 Spring Security。随着时间的发展,它逐渐成为企业级应用中不可或缺的安全解决方案。 ##...

    Spring Security 2.0.x完全中文参考文档

    Spring Security 的前身是Acegi Security,随着Spring框架的发展而逐渐演进,并最终成为Spring Security。自2.0.x版本以来,Spring Security 不断地进行改进和增强,以适应不断变化的安全需求。 **1.3. 发行版本号*...

    acegi 入门培训教程

    Acegi Security起源于2003年,最初是作为Spring的扩展项目,称为"Spring的Acegi安全系统"。随着时间的推移,它逐渐成熟,并在2006年发布了1.0.0最终版本。2007年,Acegi成为Spring组合项目,并更名为"Spring ...

    Spring_Security3中文指南.pdf

    ### Spring Security 3.0 入门与核心概念详解 #### 一、Spring Security简介 Spring Security 是一款功能强大且高度可定制的应用安全框架,它为基于 Java 的应用程序提供了全面的安全服务。尤其对于那些采用 ...

    SpringSecurity安全权限管理手册

    第一章的"HelloWorld"示例通常是一个简单的入门教程,旨在演示如何在Spring Security中设置基本的权限控制。在这个例子中,可能会涉及到定义用户、角色和权限,以及如何拦截和处理未授权的访问请求。通过配置URL过滤...

    spring_security3入门教程实例

    在Spring Security 3.x版本中,该框架经历了一次重大的更新,与之前的Acegi Security(已被Spring Security取代)以及Spring Security 2.x相比,有了一些显著的变化。 本入门教程将引导你逐步了解如何设置并运行一...

    Spring Security Reference中文版

    - **Spring Security** 的前身是Acegi Security,最初由Luke Taylor开发。 - **2006年**,Spring项目正式将其纳入,并更名为Spring Security。 - **不断发展**:随着Spring框架的发展,Spring Security也在不断...

    Spring Security 3.0.1 pdf 中文参考文档

    - **背景:** Spring Security 的前身是 Acegi 安全框架,后来被 Spring 社区采纳并重新命名为 Spring Security。 - **发展:** 经过多个版本的迭代,Spring Security 已经成为 Spring 生态系统中最成熟的安全解决...

    Packt Spring Security 3(2010-05).pdf

    - **历史背景**:Spring Security最初被称为“Acegi Security System for Spring”,是由Ben Alex在2003年发起的项目。随着时间的发展,在Ben的带领下,它逐渐演变成一个成熟的、广泛应用于Spring Framework应用...

    Spring Security 3.0.3

    Spring Security 的前身是 Acegi 安全框架,在被 Spring 社区采纳后,经过不断发展和改进,成为了今天广泛使用的 Spring Security。自发布以来,Spring Security 不断进行版本更新,提供了更多的功能和更好的安全性...

    acegi入门demo

    总结来说,"acegi入门demo"是一个展示如何在Spring应用中使用Acegi Security进行用户认证和授权的实例。它涉及到的关键概念包括`AuthenticationManager`、`AccessDecisionManager`、`FilterSecurityInterceptor`以及...

    Packtpub.Spring.Security.3.May.2010.

    Spring Security 最初由 Ben Alex 创建,当时名为 Acegi Security System for Spring。随着时间的推移,该框架不断发展壮大,并逐渐成为了保护 Spring 应用的标准解决方案。Spring Security 3 的发布标志着框架进入...

    spring mvc入门示例

    在实际开发中,Spring MVC还可以与Spring Boot结合,简化项目初始化和配置,同时可以集成其他Spring生态中的组件,如MyBatis或JPA进行数据访问,Acegi或Spring Security进行权限管理,Spring Data JPA进行ORM操作等...

Global site tag (gtag.js) - Google Analytics