我是Spring Security的新手。我看过很多关于如何通过外部属性文件的注释注入值的文章。我尝试了很多方法,但最终都是用java。lang.IllegalArgumentException:无法解析占位符“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(…)按照相同的步骤进行注释。
假设我想保护一个名为“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=nnemp.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("(#{valProp['val.id']} == #{valProp['emp.id']})")
public boolean update(){
//if accessable
return true;
}
但是表达式{valProp['val.id']}=={valProp['emp.id']}
没有计算。
我在注入值时是否犯了错误?当我注释成员变量时,它是有效的,但在这里不起作用。有什么想法吗?提前谢谢。
引发异常的原因是,默认情况下,当无法解析值时,属性占位符会引发异常。此外,您有两个属性占位符,通过它可能无法解析所有值。
您可以通过设置ignore Unsolvable属性来更改此行为:
<context:property-placeholder location="/WEB-INF/*.properties" ignore-unresolvable="true" />
<bean id="valProp" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/val.properties" p:ignoreUnresolvablePlaceholders="true" />
然而,请注意b
试着考虑以下几点
1). 将注释更改为:
@Value("#{valProp['val.id']}")
2). 用PropertiesFactoryBean
替换PropertyPlaceHolderConfigure
。
希望这能解决这个例外。
我在整个代码中有一堆常量,用于系统的各种可调整属性。我正在将它们全部移动到一个中央文件中。我目前的解决方案是有一个静态加载文件并公开各种getter方法,如下所示: 唯一的问题是,对于我从这个文件中获得的每个常量,我都有一些样板: 我不认为我想使用Spring或类似的东西,因为那看起来更像是boilerplae。我希望使用自定义注释来解决这个问题。我找到了这个教程,但是我真的不能弄清楚如何从注释处
我有以下课程: 我从控制器调用方法test(): 然而,spring并没有注入构建。版本值,即使类具有组件注释。 我在控制器中使用相同的属性,它工作正常。 我做错了什么?
我试图向自定义注释中注入一个值,但Spring似乎没有进行评估。
问题内容: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 问题答案: 有什么方法可以通过JPA注释指定SQL注释?表和列的注释。 否。如果要定义表和列注释,最好的选择是在生成的DDL中根据事实进行操作,然后再对数据库执行操作。
如何使用注释填充值映射,而不在applicationContext中定义任何内容。xml或任何其他xml文件。 我使用的是SpringBoot,它没有任何XML文件,也不需要任何XML文件,所以请不要告诉我用XML等声明任何属性读取器bean。 此外,这是一个属性注入问题-请不要建议使用数据库存储数据-这不是一个答案,对于我的情况也不可能。 此外,我也不能使用YAML(由于部署/操作需求)。 我已
问题内容: 我试图通过注释将整个JSF托管Bean注入另一个托管Bean非常相似,但是我正在注入Bean,而不是Servlet)。这就是我在做什么: 不起作用(JSF 2.0 / Mojarra 2.0.3): 有没有可能或者我需要通过编程方式进行注射? 问题答案: 您需要添加setter和getter 当将解析并注入依赖项时,它将使用setters注入,因此适当的setters / getter