关于SpringSecurity出现Failed to evaluate expression ‘ps.hasAuthority(‘role‘)‘

1. 问题描述

在使用SpringSecurity对接口进行权限校验时,报错java.lang.IllegalArgumentException: Failed to evaluate expression 'ps.hasAuthority('role')'

2. 解决方案

2.1 查看是否添加注解

对于SpringSecurity对配置类,我们需要添加注解@EnableGlobalMethodSecurity(prePostEnabled = true)

java 复制代码
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Configuration	
public class AdminSecurityConfig extends WebSecurityConfigurerAdapter {
	//...
}

2.2 校验接口实现类的名称

  • 对于直接使用@Service注解标识的接口实现类,其注入Spring容器后,对应bean名称的首字母会变为小写。例如注入的实现类为PermissionServiceImpl,其bean名称为permissionServiceImpl
  • 对于使用@Service(value = "xxx"),其对应bean的名称就为xxx,直接使用即可。

2.3 校验是否添加@符号进行标识。

对应接口上添加了@PreAuthorize注解后,参数正确格式为@beanName.methodName(roleName)。例如:

java 复制代码
@PreAuthorize("@permissionServiceImpl.hasPermission('role')")
相关推荐
吃喝不愁霸王餐APP开发者3 分钟前
外卖API对接过程中时间戳与时区处理的最佳实践(避免核销失效)
java
抹除不掉的轻狂丶10 分钟前
Java 日志框架完整指南:发展历史、核心组成与最佳实践
java·开发语言·python
林涧泣21 分钟前
使用Java输出HelloWorld
java·开发语言
叫致寒吧32 分钟前
Dockerfile
java·spring cloud·eureka
鸽鸽程序猿39 分钟前
【刷题册】三
java·刷题
ruleslol41 分钟前
java中调用uri请求的几种常见的方法
java
资生算法程序员_畅想家_剑魔41 分钟前
Java常见技术分享-10-装饰器模式
java·开发语言·装饰器模式
ss27342 分钟前
ThreadPoolExecutor七大核心参数:从源码看线程池的设计
java·数据库·算法
林shir1 小时前
Java基础1.4-运算符
java·开发语言