日期:2014-05-16  浏览次数:20550 次

《Spring Security3》第四章第二部分翻译(JdbcDaoImpl的高级配置)(转载)

?

JdbcDaoImpl 的高级配置

JdbcDaoImpl 拥有众多的可配置选项使其可以在已存在的 schema 中使用,或对其功能进行更复杂地调整。在很多场景下,很可能我们只需调整内置 UserDetailsService 类的配置而不需要写自己的代码。

?

有一个很重要的功能就是在用户( User )和权限( GrantedAuthority )之间添加一个隔离层( a level of indirection ——找不到更好的译法了),这通过将 GrantedAuthority 按照逻辑划分成集合即组( group )来实现。用户能够被分配到一个或多个组,而组的成员被赋予了一系列的 GrantedAuthority 声明。



?正如在图中所描述的那样,中间的隔离层使得我们可以将相同集合的角色分派给很多人,而这只需要指定新用户到存在的组中即可。将这与我们之前的做法对比,在以前的做法是将 GrantedAuthority 直接分配给单个的用户。

?

这种将权限进行打包处理的方式可能在以下的场景中用到:

?

?

l? 要将用户分成不同的组,而组之间有些角色是重叠的;

l? 想要全局地修改一类用户的权限。如,如果你拥有一个“供应商”的分组,而你想要修改他们能否访问应用特定区域的设置;

l? 拥有大量的用户,你不需要用户级别的授权配置。

?

除非你的应用用户量很有限,否则很可能要使用基于组的访问控制。这种管理方式的简便性和扩展性带来的价值远远超过了它稍微增加的复杂性。这种将用户权限集中到组中的技术通常叫做基于组的访问控制( Group-Based Access Control GBAC )。

【基于组的访问控制几乎在市面上任何安全的操作系统和软件包中都能看到。微软的 活动目录( Active Directory AD) 是大范围使用 GBAC 的典型实现,它把 AD 的用户纳入组中并给组授权权限。通过使用 GBAC ,能够指数级得简化对大量基于 AD 组织的权限管理。想一下你所使用软件的安全功能——用户、分组以及权限是如何管理的?这种方式编写安全功能的利弊是什么?】

?

让我们对 JBCP Pets 添加一层抽象,并将基于组的授权理念应用于这个站点。

配置基于组的授权

我们会为站点添加两个组——普通用户(我们将其称为“ Users ”)和管理员(我们将其称为“ Administrators ”)。通过修改用于启动数据库的 SQL 脚本,将已经存在的 guest admin 账号分配到合适的组中。

配置 JdbcDaoImpl 以使用用户组

首先,我们需要为 JdbcDaoImpl 的自定义实现类设置属性以启用组的功能,并关闭对用户直接授权的功能。在 dogstore-base.xml 中添加如下的 bean 声明:

?

Xml代码 ?收藏代码
  1. < bean ? id = "jdbcUserService" ???
  2. ??????class = "com.packtpub.springsecurity.security.CustomJdbcDaoImpl" > ??
  3. ??< property ? name = "dataSource" ?