如何在spring安全上下文配置xml文件中使用application.properties中的布尔参数?

时间:2013-02-18 13:46:10

标签: spring web-applications spring-mvc spring-security application-server

我正在尝试使用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

2 个答案:

答案 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打开一张票。