spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

一、原理剖析

先看一段官方文档对haspermission的描述(文档链接:https://docs.spring.io/spring-security/site/docs/5.2.7.BUILD-SNAPSHOT/reference/htmlsingle/#el-permission-evaluator

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

开头的意思是haspermission的注解会委托给PermissionEvaluator接口,而这个接口默认实现是DenyAllPermissionEvaluator(源码如下) 这个类的两个方法直接返回了false,所以我们必须自己实现一个PermissionEvaluator 并且把它注入到默认DefaultWebSecurityExpressionHandler类中(注意与DefaultMethodSecurityExpressionHandler区分,这两个类都持有permissionEvaluator 应该一个是web环境一个是SE环境,我这里是web环境,故而是DefaultWebSecurityExpressionHandler类)

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

二、实现

大概理解需要做什么了,首先实现一个自己的PermissionEvaluator实现类,其次将它注入到DefaultMethodSecurityExpressionHandler中。

代码如下:

1、定义自己的MyPermissionEvaluator类实现PermissionEvaluator接口(注:@Sl4j 是日志门面,lombok插件提供的,不需要的可以不用,@Component 必须要,是表明 他是spring的bean 需要交给spring ioc 容器管理,方便后面使用自动注入)

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

2、接着定义一个配置类继承WebSecurityConfigurerAdapter,将自定义好的MyPermissionEvaluator类注入到DefaultWebSecurityExpressionHandler类中(下图红色圈出)即可

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

3、验证

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

验证成功

spingsecurity中haspermission用法以及配置自定义PermissionEvaluator

4、关于DefaultMethodSecurityExpressionHandler和DefaultWebSecurityExpressionHandler 下面的继承类图

 

spingsecurity中haspermission用法以及配置自定义PermissionEvaluatorspingsecurity中haspermission用法以及配置自定义PermissionEvaluator