我是春季安全的新手。我看过很多关于如何通过注释从外部属性文件中注入值的帖子。我尝试了很多方法,但我总是以 java.lang.IllegalArgumentException: Could not resolve placeholder 'val.id' 异常告终。
你能给我一些提示如何处理这个异常吗?
我的java类是以下一个:
@Controller
public class Employee {
@Value("${val.id}")
public String valId;
public String getValId() {
return valId;
}
public void setValId(String valId) {
this.valId = valId;
}
我的属性文件名为 val.properties,位于 WEB-INF 下,其内容为 val.id=xyz
我将以下内容放在我的主要上下文 bean 中。
<context:property-placeholder location="/WEB-INF/*.properties" />
<bean id="valProp" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/val.properties"/>
A continuous question:
当我接受上面的答案时,将属性文件中的值注入到带注释的 bean 中工作正常。但是,我无法按照相同的过程将其注入 @PreAuthorize(...) 注释。
假设我想保护一种称为“更新”的方法。当且仅当 valId 等于 empId 时才允许使用此方法。valId 和 empId 的值在 val.properties 文件中初始化。
我的java bean是:
public class Employee {
public String valId;
public String empId;
public String getValId() {
return valId;
}
public void setValId(String valId) {
this.valId = valId;
}
public String getEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
}
我的属性文件包含: val.id=nn emp.id=nn
我的主上下文文件中有占位符配置:
<context:property-placeholder location="/WEB-INF/*.properties" />
<bean id="valProp" class="org.springframework.beans.factory.config.PropertiesFactoryBean"
p:location="/WEB-INF/val.properties"/>
我的 PreAuthorize 注释(方法安全)是:
@PreAuthorize("(#{valProp['val.id']} == #{valProp['emp.id']})")
public boolean update(){
//if accessable
return true;
}
但#{valProp['val.id']} == #{valProp['emp.id']}
不评估表达式。
我在注入价值方面做错了吗?当我注释成员变量时它起作用了,但在这里不起作用。请问有什么想法吗?提前致谢。