我正在尝试使用boolean
文件中application.properties
的{{1}}参数。
我不知道为什么我可以使用not-boolean参数,但是我得到了boolean的错误。
如何使用布尔参数?
这是我的application.properties:
spring-security configuration xml
我的spring-security.xml是:
JDBC_CONNECTION_STRING=jdbc:mysql://localhost:3306/schema?user=username&password=password
protocol=http
USE_SECURE=false
... 但我得到这个错误: cvc-datatype-valid.1.2.1:'$ {USE_SECURE}'不是'boolean'的有效值
我也尝试设置< remember-me user-service-ref="internalUserDetails" data-source-ref="dataSource" key="this-is-my-key02203452416fw" use-secure-cookie="${USE_SECURE}" />
,但我又遇到了同样的错误。
如何在spring security配置xml文件中使用布尔参数?
这是我的web.xml:
USE_SECURE=False
答案 0 :(得分:3)
相反,传递关键字“$ {USE_SECURE}”的值。当我想要使用布尔
时,我遇到了类似的问题<bean id="flag" class="java.lang.Boolean">
<constructor-arg value="${FLAG}"/>
</bean>
它与'属性'一起工作正常,所以我以其他方式解决了我的情况。我不确定它是不是一个春虫?
答案 1 :(得分:2)
安全命名空间的xsd架构定义仅允许use-secure-cookie
属性中的布尔值。如果您未指定其中一个允许的文字(“true”或“false”),则您的xml将不会通过架构验证,甚至无法解析。
因此,如果使用安全命名空间配置,则无法使用外部属性来设置此值。为了证明我的观点,以下是RememberMeBeanDefinitionParser.parse()
的相关代码段:
String useSecureCookie = element.getAttribute("use-secure-cookie");
if (StringUtils.hasText(useSecureCookie)) {
services.getPropertyValues().addPropertyValue(
"useSecureCookie", Boolean.valueOf(useSecureCookie));
}
如您所见,该属性直接转换为布尔值,因此没有任何机制可以进一步处理该值。
我不完全确定,但是可以通过简单地放宽xsd以允许任何字符串值,并将该值传递给bean定义(上面的services
)而不将其转换为布尔值来解决这个问题。 。然后PropertyPlaceholderConfigurer
稍后可以解析给定值,如果它恰好是属性占位符。
如果您想尝试一下,请随时在Spring Security issue tracker打开一张票。