gpt4 book ai didi

java - 上下文中没有注册 bean 解析器来解析对 bean 的访问

转载 作者:IT老高 更新时间:2023-10-28 13:57:04 26 4
gpt4 key购买 nike

我正在尝试使用 Java Config 实现方法安全性,但出现错误:-

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

方法是:-

@PreAuthorize("@appPermissionEvaluator.hasSystemPermission()")
public String something() {
...
}

Config类定义为(MethodSecurityConfig.java):-

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

@Bean
public AppPermissionEvaluator appPermissionEvaluator() {
return new AppPermissionEvaluator();
}

@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(appPermissionEvaluator());
return expressionHandler;
}

...
}

我检查了我是否能够在同一个类中 Autowiring bean,我还发现默认的 hasPermission() 方法在我实现它们时正在工作,唯一的问题是从 SpEL 读取 bean。我不确定出了什么问题。任何指针?

我正在使用 Spring 4.1.5 和 Spring security 3.2.7

最佳答案

您需要确保在 DefaultMethodSecurityExpresssionHandler 上设置 ApplicationContext。例如:

@Autowired
private ApplicationContext context;

// ...

@Override
protected MethodSecurityExpressionHandler expressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler =
new DefaultMethodSecurityExpressionHandler();
expressionHandler.setPermissionEvaluator(appPermissionEvaluator());

// !!!
expressionHandler.setApplicationContext(context);

return expressionHandler;
}

或者更简洁地说,如果您将单个 PermissionEvaluator 定义为 Bean,Spring Security 将自动拾取它(无需覆盖 expressionHandler())。例如:

@Bean
public PermissionEvaluator appPermissionEvaluator() {
...
}

关于java - 上下文中没有注册 bean 解析器来解析对 bean 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29328124/

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