Spring Security的ACL功能简介

栏目: 后端 · 发布时间: 7年前

内容简介:Spring Security的ACL功能简介

权限控制主要应用场景及解决方案,

本文由博主 http://www.javacoder.cn/?p=926 整理,转载请注明出处,谢谢

1)WEB URL权限的控制

通过http filter链完成,比如

<http realm="Contacts Realm" use-expressions="false">
<intercept-url pattern="/login/impersonate" access="ROLE_SUPERVISOR"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
</http>

拥有ROLE_SUPERVISOR角色的用户才能访问/login/impersonate路径,ROLE_USER角色的用户可以访问其他的路径

2)数据权限和service层方法调用的权限控制

MethodSecurityInterceptor 配合使用PreAuthorize、PostAuthorize等注解实现

public interface BankService {
@PreAuthorize("hasRole('ROLE_SUPERVISOR') or "
+ "hasRole('teller') and (#account.balance + #amount >= -#account.overdraft)")
public Account post(Account account, double amount);
}

3)对read,write,create,delete,administration的控制

这就是本文将要介绍的spring的ACL功能

spring security自带的 contacts-xml 示例对该功能进行了演示,如果要使用该功能,该示例是学习该功能不二之选。本文也是基于该示例进行讲解的

该示例默认的AclService是基于HSQLDB数据库实现的,HSQLDB内存数据库我一时半会没有找到合适的控制台,所以改成了 MySQL 数据库,主要的改动是建表的 SQL 和JdbcMutableAclService bean定义时classIdentityQuery和sidIdentityQuery属性的指定,对应HSQLDB,当我们执行自动创建主键的insert语句后,可以通过"call identity()"获得刚产生的id,而MySQL的语法为"select LAST_INSERT_ID()",所以定义如下

<bean id="aclService" class="org.springframework.security.acls.jdbc.JdbcMutableAclService">
<constructor-arg ref="dataSource"/>
<constructor-arg ref="lookupStrategy"/>
<constructor-arg ref="aclCache"/>
<property name="classIdentityQuery" value="select LAST_INSERT_ID()"/>
<property name="sidIdentityQuery" value="select LAST_INSERT_ID()"/>
</bean>

spring security ACL的表的ER图如下,

Spring Security的ACL功能简介

各个表的简介如下:

users : 不属于ACL的表,用户表,userService会使用本表,users.USERNAME = acl_sid.SID,acl_sid有对应的记录表示同一个principal,所以大家可以看到ER图中没有外键关系

authorities :用于记录用户被授予的权限,authorities.AUTHORITY = acl_sid.SID,acl_sid即可以表示一个principal,也可以表示一个authority,通过acl_sid.PRINCIPAL字段来区分

contacts :是本例的实体表,对该表的记录进行CRWDA权限的控制,contacts.ID = acl_object_identity.OBJECT_ID_IDENTITY;

acl_class : 表示对哪个java entity进行权限控制,本例contacts表只有一条记录为'entity 'sample.contact.Contact';

acl_sid :security identity,根据PRINCIPAL字段的不同分别表示principal或者authority;

acl_object_identity :acl_object_identity.OBJECT_ID_IDENTITY = contacts.ID,acl_object_identity.OBJECT_ID_CLASS=acl_class.ID

and acl_object_identity.OWNER_SID= acl_sid.ID;分别对对应字段的引用,也就是说id及该entity的类型唯一地确定一条acl_object_identity记录,acl_object_identity是对实体记录的抽象。

acl_entry

: acl_entry.SID = acl_sid.ID, acl_entry.ACL_OBJECT_IDENTITY = acl_object_identity.ID ;表示实际的授权。授权通过位相与存放在acl_entry.MASK字段中,read(0X1), write(0X2), create(0X4), delete(0X8), administration(0xF)

最重要类有AclService,及对应的实现JdbcMutableAclService。Acl及对应的实现AclImpl,Acl表示一个实体的权限分配,本例中为一个Contact记录的权限分配

Posted in:Spring Security


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

刘大猫的财富之旅

刘大猫的财富之旅

刘欣、刘大猫 / 新华出版社 / 2017-7-21 / 58.00元

作者刘大猫是一名90后的互联网连环创业者,26岁的他通过互联网创业收获到了财富,不仅仅是物质财富,还有认知的财富。 与其他创业类书籍不通的是,这本书非常真实,务实。书中没有任何大道理鸡汤,作者用平实的语言记录了创业以来遇到的种种事情,变化,困境,以及阶段性的成绩,记录了作者务实,鲜活的创业青春。一起来看看 《刘大猫的财富之旅》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具