SpEL 中的嵌套变量引用在 Spring-5.x 中停止工作

问题描述 投票:0回答:1

foo.bar
为 1,
foo.foo
为 2,
bar
为“foo”。以下构造:

<property name="boo" value="${${bar}.foo}"/>

用于使用 Spring-4,将属性

boo
设置为 2。

但是在 Spring-5.x 中它根本没有扩展——属性

boo
被分配了整个文字表达式字符串。

在不重构底层 Java 代码的情况下,最简单的修复是什么?

spring-el spring5
1个回答
0
投票

您在 Spring 5.x 中遇到的问题是由于与 Spring 4.x 相比,对嵌套属性占位符的处理更加严格,这样做是为了避免安全风险。

例如,您可以启用属性占位符的旧行为。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- others -->

    <!-- Enable legacy placeholder behavior -->
    <bean id="propertyAccessor" class="org.springframework.context.expression.BeanExpressionResolver" />
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="beanExpressionResolver" ref="propertyAccessor" />
    </bean>

    <!-- Your other configurations -->
    <property name="boo" value="${${bar}.foo}"/>
</beans>

测试此解决方案,但请记住,维护默认的更严格行为通常更有利于安全性和可维护性。

© www.soinside.com 2019 - 2024. All rights reserved.