Spring Security使用详解5(角色继承)

Stella981
• 阅读 1097

之前的文章中,各个角色之间不具备任何关系,但一般来说角色之前是有关系的,例如 ROLE_admin 一般既有 admin 的权限,又具有 user 的权限。下面介绍如何配置这种角色之间相互继承的关系。

五、角色继承

1、配置角色关系

要配置角色继承关系,只需在 Spring Security 的配置类中提供一个 RoleHierarchy 即可。下面高亮代码含义:

  • ROLE_dba 拥有所有的权限

  • ROLE_admin 具有 ROLE_user 的权限

  • ROLE_user 则是一个公共角色

    @Configuration public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter { // 指定密码的加密方式 @SuppressWarnings("deprecation") @Bean PasswordEncoder passwordEncoder(){ // 不对密码进行加密 return NoOpPasswordEncoder.getInstance(); } // 配置用户及其对应的角色 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("root").password("123").roles("DBA") .and() .withUser("admin").password("123").roles("ADMIN") .and() .withUser("hangge").password("123").roles("USER"); } // 配置角色继承关系 @Bean RoleHierarchy roleHierarchy() { RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); String hierarchy = "ROLE_DBA > ROLE_ADMIN > ROLE_USER"; roleHierarchy.setHierarchy(hierarchy); return roleHierarchy; } // 配置 URL 访问权限 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 开启 HttpSecurity 配置 .antMatchers("/db/").hasRole("DBA") // db/ 模式URL需DBA角色 .antMatchers("/admin/").hasRole("ADMIN") // admin/ 模式URL需ADMIN角色 .antMatchers("/user/").hasRole("USER") // user/ 模式URL需USER角色 .anyRequest().authenticated() // 用户访问其它URL都必须认证后访问(登录后访问) .and().formLogin().loginProcessingUrl("/login").permitAll() // 开启表单登录并配置登录接口 .and().csrf().disable(); // 关闭csrf } }

2、运行测试

(1)启动项目,我们使用 admin 用户进行登录,由于该用户同时具有 USER 角色权限,所以登录后可以访问 /user/hello 这个接口。

Spring Security使用详解5(角色继承)

(2)而由于 /db/hello 接口需要 DBA 角色,因此 admin 用户仍然无法访问。

Spring Security使用详解5(角色继承)

点赞
收藏
评论区
推荐文章
Irene181 Irene181
3年前
一篇文章带你搞懂Python中的继承和多态
一、继承的介绍继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。继承的特点就是子类可以使用父类的属性(特征、技能)。继承是类与类之间的关系。继承可以减少代码冗余、提高重用性。在现实生活中,继承一般指的是子女继承父辈的财产,如下图:二、如何用继承?1.继承语法Class派生类名(基类名):基类名写在括号里。在继承关系中,已有的,设计好
Wesley13 Wesley13
3年前
RBAC模型
RBAC基于角色的访问控制(RoleBasedAccessControl)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用
Stella981 Stella981
3年前
Spring Security使用详解4(基于数据库的URL权限规则配置)
虽然前面我们实现了通过数据库来配置用户与角色,但认证规则仍然是使用HttpSecurity进行配置,还是不够灵活,无法实现资源和角色之间的动态调整。要实现动态配置 URL权限,就需要开发者自定义权限配置,具体步骤如下。四、基于数据库的URL权限规则配置 1、数据库设计这里的数据库在前文(点击查看)的基础上增加一张资
Stella981 Stella981
3年前
Spring Security使用详解2(基于内存的用户、URL权限配置 )
二、基于内存的用户、URL权限配置1、用户角色配置(1)我们可以通过自定义类继承WebSecurityConfigurerAdapter,从而实现对SpringSecurity更多的自定义配置。比如下面样例我们就配置了两个用户,以及他们对应的角色。注意:基于内存的用户配置在配置角色时不需要添加“ROLE\_”前缀,而
Stella981 Stella981
3年前
PHP Laravel5实现的RBAC权限管理操作示例
根据不同的权限,在菜单栏显示不同的功能,只对菜单进行了限制,若对路由也进行限制,可以根据菜单的例子,请自行完善,开发。下面请认真学习一下laravel的RBAC设计1、建表(用户表、角色表、权限表、用户角色表、角色权限表)1CREATETABLEIFNOTEXISTSmr_role2(3id
Wesley13 Wesley13
3年前
C++ ORM ODB 入门介绍(二)
本节主要介绍ODB中的继承和C之间的关系。ORM中的O的关系是很复杂的。其中之一便是对象的继承体系。在C语言中支持类之间的继承,这这些继承的关系是否可以同时映射到数据库呢?1\.ODB中的继承类型ODB支持2中继承类型,abstract和polymorphic。根据ODB文档的描述,abstract方式为
Easter79 Easter79
3年前
Springmvc+mybatis+shiro+Dubbo+ZooKeeper+Redis+KafKa j2ee分布式架构核心技术
内置功能(只列了一部分功能)1.用户管理:用户是系统操作者,该功能主要完成系统用户配置。2.机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。3.区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。4.菜单管理:配置系统菜单,操作权限,按钮权限标识等。5.角色管理:角色菜单权限分配、设置角色按机构进行
Easter79 Easter79
3年前
SSH ++shiro+restful+bootstrap java架构
内置功能(只列了一部分功能)1.用户管理:用户是系统操作者,该功能主要完成系统用户配置。2.机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。3.区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。4.菜单管理:配置系统菜单,操作权限,按钮权限标识等。5.角色管理:角色菜单权限分配、设置角色按机构进行
Stella981 Stella981
3年前
SSH ++shiro+restful+bootstrap java架构
内置功能(只列了一部分功能)1.用户管理:用户是系统操作者,该功能主要完成系统用户配置。2.机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。3.区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。4.菜单管理:配置系统菜单,操作权限,按钮权限标识等。5.角色管理:角色菜单权限分配、设置角色按机构进行
Stella981 Stella981
3年前
PostgreSQL学习手册(十) 角色和权限
 PostgreSQL是通过角色来管理数据库访问权限的,我们可以将一个角色看成是一个数据库用户,或者一组数据库用户。角色可以拥有数据库对象,如表、索引,也可以把这些对象上的权限赋予其它角色,以控制哪些用户对哪些对象拥有哪些权限。    一、数据库角色:   1\.创建角色:   CREATEROLE