私は春のセキュリティのために新しいです。外部プロパティ ファイルから注釈を介して値を挿入する方法に関する多くの投稿を見てきました。私は多くの方法を試しましたが、常に 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;
}
私のプロパティ ファイルは、WEB-INF の下にある val.properties と呼ばれ、その内容は 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(...) アノテーションに注入することはできません。
「update」というメソッドを保護したいとします。このメソッドは、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']}
は評価されません。
値を挿入するのに何か間違いをしましたか? メンバー変数に注釈を付けると機能しましたが、ここでは機能しません。何かアイデアはありますか?前もって感謝します。