SpringSecurity(8)

您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~

之前虽然实现了角色和权限之间的简单配对,但是如果每一个角色都要重新来过一次,就有点呆板了。如果能够配置一个「角色模板」,再通过这个模板来配置其他角色,岂不是更简单?Spring Security虽然没有角色模板,但可以通过「继承」的方式来「曲线就国」。

而且有时候角色与用户并不是完全一一对应的。比如,admin接口只有ROLE_ADMIN角色拥有,manager接口只有ROLE_MANAGER角色拥有。但其实admin是应该拥有manager的权限的。所以来看看怎么个「应该」法。

首先,在sys_suer 表中增加employee用户:

然后在sys_role表中增加ROLE_EMPLOYEE角色:

再在sys_permission权限表中增加角色权限:

修改LoginController,增加employee接口:

然后在WebSecurityConfiguration 中引入Spring Security的RoleHierarchy角色继承类:

通过Postman测试用户各自拥有的角色:

1、admin { ROLE_ADMIN, ROLE_MANAGER, ROLE_EMPLOYEE }

2、manager { ROLE_MANAGER, ROLE_EMPLOYEE }

3、employee { ROLE_EMPLOYEE }

可以看出来,Spring Security有几个特点:

1、角色可以被继承,但权限并不能”跟随”角色一起被继承

2、admin只能访问/admin/create和/admin/read这两个接口

3、manager也只能访问/manager/create和/manager/remove这两个接口

4、admin虽然继承了user的角色ROLE_MANAGER,但并没有显示地获得ROLE_MANAGER对应的权限,因为加入权限后,角色继承就会失效

因为权限无法跟随角色被继承,所以需要手动去完善权限。为了让admin也能访问manager的接口,要赋予角色更多的权限。现在把manager和employee的权限都赋予admin:

然后在LoginController里再增加employee的权限:

通过admin登录,分别访问如下接口:

可以看到,admin已经有之前manager和employee的权限了。

Spring Security虽然比较简单,也很方便,多适用于一些比较小型的应用系统,角色简单,权限不多。如果要实现一些比较复杂的权限功能,Spring Security就会有点力不从心了,而且会出现诸如自定义filter被执行多次的问题。所以,一般在大型或企业级应用中,都不会,至少不会完全依赖Spring Security,而是依据实际业务需求,实现自定义的权限系统。

*[En]*

**

Original: https://www.cnblogs.com/xiangwang1111/p/16942813.html
Author: xiangwang1111
Title: SpringSecurity(8)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/222791/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总