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

之前的文章中,各个角色之间不具备任何关系,但一般来说角色之前是有关系的,例如 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(); }

    1// 配置用户及其对应的角色 2@Override 3protected void configure(AuthenticationManagerBuilder auth) throws Exception { 4 auth.inMemoryAuthentication() 5 .withUser("root").password("123").roles("DBA") 6 .and() 7 .withUser("admin").password("123").roles("ADMIN") 8 .and() 9 .withUser("hangge").password("123").roles("USER"); 10} 11 12// 配置角色继承关系 13@Bean 14RoleHierarchy roleHierarchy() { 15 RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); 16 String hierarchy = "ROLE_DBA > ROLE_ADMIN > ROLE_USER"; 17 roleHierarchy.setHierarchy(hierarchy); 18 return roleHierarchy; 19} 20 21// 配置 URL 访问权限 22@Override 23protected void configure(HttpSecurity http) throws Exception { 24 http.authorizeRequests() // 开启 HttpSecurity 配置 25 .antMatchers("/db/**").hasRole("DBA") // db/** 模式URL需DBA角色 26 .antMatchers("/admin/**").hasRole("ADMIN") // admin/** 模式URL需ADMIN角色 27 .antMatchers("/user/**").hasRole("USER") // user/** 模式URL需USER角色 28 .anyRequest().authenticated() // 用户访问其它URL都必须认证后访问(登录后访问) 29 .and().formLogin().loginProcessingUrl("/login").permitAll() // 开启表单登录并配置登录接口 30 .and().csrf().disable(); // 关闭csrf 31}

    }

2、运行测试

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

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

点赞
收藏

评论区

加载中...

相关推荐

一篇文章带你搞懂Python中的继承和多态

一、继承的介绍继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。继承的特点就是子类可以使用父类的属性(特征、技能)。继承是类与类之间的关系。继承可以减少代码冗余、提高重用性。在现实生活中,继承一般指的是子女继承父辈的财产,如下图:二、如何用继承?1.继承语法Class派生类名(基类名):基类名写在括号里。在继承关系中,已有的,设计好

RBAC模型

RBAC基于角色的访问控制(RoleBasedAccessControl)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用

Spring Security使用详解4(基于数据库的URL权限规则配置)

虽然前面我们实现了通过数据库来配置用户与角色,但认证规则仍然是使用HttpSecurity进行配置,还是不够灵活,无法实现资源和角色之间的动态调整。要实现动态配置 URL权限,就需要开发者自定义权限配置,具体步骤如下。四、基于数据库的URL权限规则配置 1、数据库设计这里的数据库在前文(点击查看)的基础上增加一张资

Spring Security使用详解2(基于内存的用户、URL权限配置 )

二、基于内存的用户、URL权限配置1、用户角色配置(1)我们可以通过自定义类继承WebSecurityConfigurerAdapter,从而实现对SpringSecurity更多的自定义配置。比如下面样例我们就配置了两个用户,以及他们对应的角色。注意:基于内存的用户配置在配置角色时不需要添加“ROLE\_”前缀,而

PHP Laravel5实现的RBAC权限管理操作示例

根据不同的权限,在菜单栏显示不同的功能,只对菜单进行了限制,若对路由也进行限制,可以根据菜单的例子,请自行完善,开发。下面请认真学习一下laravel的RBAC设计1、建表(用户表、角色表、权限表、用户角色表、角色权限表)1CREATETABLEIFNOTEXISTSmr_role2(3id

C++ ORM ODB 入门介绍(二)

本节主要介绍ODB中的继承和C之间的关系。ORM中的O的关系是很复杂的。其中之一便是对象的继承体系。在C语言中支持类之间的继承,这这些继承的关系是否可以同时映射到数据库呢?1\.ODB中的继承类型ODB支持2中继承类型,abstract和polymorphic。根据ODB文档的描述,abstract方式为