`

网上的一篇spring security详解教程,觉得不错,转过来了

阅读更多

先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但是我希望我下面的只言片语能够把它说清楚。大家都知道,如果要对Web资源进行保护,最好的办法莫过于Filter,要想对方法调用进行保护,最好的办法莫过于AOPAcegiWeb资源的保护,就是靠Filter实现的。如下图: 
查看更多精彩图片
一般来说,我们的Filter都是配置在web.xml中,但是Acegi不一样,它在web.xml中配置的只是一个代理,而真正起作用的Filter是作为Bean配置在Spring中的。web.xml中的代理依次调用这些Bean,就实现了对Web资源的保护,同时这些Filter作为BeanSpring管理,所以实现AOP也很简单,真的是一举两得啊。 

Acegi
中提供的Filter不少,有十多个,一个一个学起来比较复杂。但是对于我们Web开发者来说,常用的就那么几个,如下图中的被红圈圈标记出来的: 

查看更多精彩图片
从上到下,它们实现的功能依次是1、制定必须为https连接;2、从Session中提取用户的认证信息;3、退出登录;4、登录;5、记住用户;6、所有的应用必须配置这个Filter 

一般来说,我们写Web应用只需要熟悉这几个Filter就可以了,如果不需要https连接,连第一个也不用熟悉。但是有人肯定会想,这些Filter怎么和我的数据库联系起来呢?不用着急,这些Filter并不直接处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图: 
查看更多精彩图片

对于这两种管理器,那也是不需要我们写代码的,Acegi也提供了现成的类。那么大家又奇怪了:又是现成的,那怎么和我的数据库关联起来呢?别着急,其实这两个管理器自己也不做事,认证管理器把任务交给了Provider,而决策管理器则把任务交给了Voter,如下图: 

查看更多精彩图片
现在我要告诉你们,这里的ProviderVoter也是不需要我们写代码的。不要崩溃,快到目标了。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>

分享到:
评论

相关推荐

    spring-security3 入门篇

    Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于Java应用程序。它为Web应用和企业级应用提供了安全性的全面解决方案。本入门篇将介绍Spring Security的基础知识,包括其核心概念、配置以及...

    SpringSecurity_day03.pdf

    ### Spring Security与Spring Boot集成详解 #### 一、Spring Security简介 Spring Security 是一个功能强大的安全框架,它为基于 Java 的应用程序提供了身份验证(authentication)、授权(authorization)、CSRF ...

    Spring-Security安全权限管理手册

    ### Spring-Security安全权限管理手册知识点详解 #### 一、Spring Security简介与选择原因 **Spring Security** 是一个强大的和高度可定制的身份验证和访问控制框架。它为开发者提供了多种安全相关的服务,使得...

    详解springSecurity之java配置篇

    Spring Security 之 Java 配置篇 Spring Security 是一个功能强大且灵活的安全框架,用于保护基于 Java 的 Web 应用程序。Spring Security 的 Java 配置是指使用 Java 代码来配置 Spring Security,以便更好地控制...

    Spring Security 3.2.x 配置

    **Spring Security 3.2.x配置详解** Spring Security是一款强大的安全框架,用于处理Java应用程序的安全需求,包括身份验证、授权和访问控制等。在3.2.x版本中,它提供了许多改进和新特性,使得安全配置更加灵活和...

    全面解析Spring Security 过滤器链的机制和特性

    Spring Security 过滤器链机制和特性详解 Spring Security 过滤器链是 Spring Security 框架中的一种核心机制,负责处理 HTTP 请求的安全验证和授权。今天,我们将深入探讨 Spring Security 过滤器链的机制和特性,...

    SpringSecurity从小白到大神.md

    ### Spring Security 入门篇详解 #### Spring Security 简介 Spring Security 是 Spring 家族中的一个重要组成部分,专门用于解决应用的安全管理问题。在 Spring Boot 出现之前,Spring Security 已经存在并发展了...

    spring-security-core-2.0.5.RELEASE.src

    《Spring Security核心模块详解》 在Java开发领域,Spring Security是一个强大的、高度可配置的安全框架,用于保护Web应用程序免受各种安全威胁。本篇将详细探讨`spring-security-core-2.0.5.RELEASE.src`这个源...

    Spring-Security-Demo-master.zip

    《Spring Security与Spring Boot整合实操详解》 在IT领域,Spring Security和Spring Boot是两个极为重要的组件,它们为开发者提供了强大的安全管理和应用程序构建能力。本篇将详细讲解如何将Spring Security集成到...

    spring-security-core-3.1.0.RC1.jar

    《Spring Security核心库3.1.0.RC1详解》 Spring Security是Java平台上的一款强大且高度可配置的安全框架,用于解决Web应用和企业级应用的安全需求。在本篇文章中,我们将深入探讨Spring Security的核心库——`...

    spring-security-3.1.0.RC3

    《Spring Security 3.1.0.RC3:企业级安全框架详解》 Spring Security是Java平台上广泛使用的安全框架,其3.1.0.RC3版本为开发者提供了强大而灵活的安全控制,使得构建安全的Web应用变得简单易行。本篇文章将深入...

    spring-security-oauth-master

    《Spring Security OAuth2详解》 在当今的互联网应用中,安全性和权限管理是至关重要的环节。Spring Security OAuth2 是一个强大的、广泛使用的安全框架,它为开发者提供了实现OAuth2协议的工具,使得应用程序能够...

    详解Spring Boot 使用Spring security 集成CAS

    Spring Security 是一个基于 Spring 的安全框架,提供了身份验证、授权和访问控制等功能。CAS(Central Authentication Service)是一种流行的单点登录解决方案,用于提供统一的身份验证服务。在本篇文章中,我们将...

    spring security (-) helloWorld

    《Spring Security HelloWorld详解》 Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛应用于Java EE和Spring应用程序中。本篇文章将基于“spring security - helloWorld”项目,探讨...

    SpringSecurity应用

    **Spring Security 应用详解** Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。它提供了全面的安全解决方案,包括登录、授权、会话管理以及防止常见攻击等功能...

    详解Spring Security 简单配置

    Spring Security 简单配置详解 Spring Security 是一个广泛使用的基于 Java 的安全框架,提供了身份验证、授权、加密等安全功能。在本篇文章中,我们将详细介绍 Spring Security 的简单配置,以便大家更好地理解和...

Global site tag (gtag.js) - Google Analytics