SpringSide 3中的安全框架2011-09-14海边沫沫在SpringSide 3的官方文档中,说安全框架使用的是Spring Security 2.0。乍一看,吓了我一跳,以 为Acegi这么快就被淘汰了呢。上搜索引擎一搜,发现原来Spring Security 2.0就是Acegi 2.0。悬着的 心放下来了。虽然SpringSide 3中关于Acegi的配置文件看起来很不熟悉,但是读了Acegi 2.0的官方文档 后,一切都释然了。先来谈一谈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并不直接 处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图: