SpringSide 3中的安全框架 - 编程入门网
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并不直接 处理用户的认证,也不直接处理用户的授权,而是把它们交给了认证管理器和决策管理器。如下图: SpringSide 3中的安全框架(2)时间:2011-09-14 海边沫沫对于这两种管理器,那也是不需要我们写代码的,Acegi也提供了现成的类。那么大家又奇怪了:又是 现成的,那怎么和我的数据库关联起来呢?别着急,其实这两个管理器自己也不做事,认证管理器把任务 交给了Provider,而决策管理器则把任务交给了Voter,如下图: 现在我要告诉你们,这里的Provider和Voter也是不需要我们写代码的。不要崩溃,快到目标了。 Acegi提供了多个Provider的实现类,如果我们想用数据库来储存用户的认证数据,那么我们就选择 DaoAuthenticationProvider。对于Voter,我们一般选择RoleVoter就够用了,它会根据我们配置文件中 的设置来决定是否允许某一个用户访问制定的Web资源。 而DaoAuthenticationProvider也是不直接操作数据库的,它把任务委托给了UserDetailService,如 下图: 而我们要做的,就是实现这个UserDetailService。图画得不好,大家不要见笑,但是说了这么多总算 是引出了我们开发中的关键,那就是我们要实现自己的UserDetailService,它就是连接我们的数据库和 Acegi的桥梁。UserDetailService的要求也很简单,只需要一个返回 org.springframework.security.userdetails.User对象的loadUserByUsername(String userName)方法。 因此,怎么设计数据库都可以,不管我们是用一个表还是两个表还是三个表,也不管我们是用户-授权, 还是用户-角色-授权,还是用户-用户组-角色-授权,这些具体的东西Acegi统统不关心,它只关心返回的 那个User对象,至于怎么从数据库中读取数据,那就是我们自己的事了。 反过来再看看上面的过程,我们发现,即使我们要做的只是实现自己的UserDetailService类,但是我 们不得不在Spring中配置那一大堆的Bean,包括几个Filter,几个Manager,几个Provider和Voter,而这 些配置往往都是重复的无谓的。好在Acegi 2.0也认识到了这个 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |