Jon*_*gel 9 java spring spring-security
我正在尝试在@PreAuthorize注释中访问bean引用,如下所示:
@PreAuthorize("@testBean.getTestValue()")
public String testSpEL() {
....
}
Run Code Online (Sandbox Code Playgroud)
我有一个配置如下的测试bean:
@Component(value="testBean")
public class TestBean {
public boolean getTestValue() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试访问testSpEL()方法时,我面临以下异常:
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1057E:(pos 1): No bean resolver registered in the context to resolve access to bean 'testBean'
at org.springframework.expression.spel.ast.BeanReference.getValueInternal(BeanReference.java:45)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:52)
at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:97)
at org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean(ExpressionUtils.java:11)
Run Code Online (Sandbox Code Playgroud)
我已经彻底完成了我的研究,但我找不到我需要在配置中更改的内容才能使其工作.有什么指针吗?
谢谢!
亲切的问候,Jonck
PS我正在使用Spring 3.0.5.以下似乎表明此类功能应该起作用:
我在SpringSource上发布了一个类似的问题,事实证明Spring Security 3.0.5中尚未支持上述功能.幸运的是,版本3.1.0.RC1支持它,但使用非标准的SpEL语法:
@PreAuthorize("testBean.getTestValue()")
public String testSpEL() {
....
}
Run Code Online (Sandbox Code Playgroud)
这是SpringSource论坛的主题网址: SpringSource论坛帖子
希望这有助于某人!