gpt4 book ai didi

spring - @PreAuthorize 与表达式中的 Bean (Spring Boot)

转载 作者:行者123 更新时间:2023-12-01 19:21:30 25 4
gpt4 key购买 nike

简单的问题,我的 Controller 中有一个@Service类@Autowired

尝试对我的 Controller 中的方法之一设置一点安全性。因此,为了简单起见,我这样做是为了测试

@PreAuthorize("@myService.helloThere()")
public void someControllerMethod() {
...
}

但确实没有成功。方法调用期间出现异常。

java.lang.IllegalArgumentException: Failed to evaluate expression '@myService.helloThere()'

我在这里错过了 EL 的一些东西吗?

更新

只需添加最后一个引起异常

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E:(pos 1): No bean resolver registered in the context to resolve access to bean 'dummyServiceImpl'

现在我不明白为什么如果我使用 @Autowired 就无法在 StandardEvaluationContext 中访问它?

更新2

由于我在自定义 GlobalMethodSecurityConfiguration 扩展类中连接了自己的角色层次结构,因此 DefaultMethodSecurityExpressionHandler 默认情况下没有设置 applicationContext 。我不确定为什么这是设计使然,或者我错过了一些明显的东西。我搜索了引用页,发现了另一个SO thread这帮助我解决了问题。我正在发布更新的安全配置。

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class GlobalMethodSecurityConfig extends GlobalMethodSecurityConfiguration {

@Autowired
ApplicationContext applicationContext; //added this

@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
final DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();

handler.setApplicationContext(applicationContext); //added this
RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();

roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_USER_MANAGER > ROLE_USER");
handler.setRoleHierarchy(roleHierarchy);
return handler;
}
}

最佳答案

试试这个。

@PreAuthorize("myService.helloThere()")

关于spring - @PreAuthorize 与表达式中的 Bean (Spring Boot),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com