Spring SpEL в XML org.springframework.expression.ParseException: нет конечного суффикса '}' для выражения

Oct 12 2020

У меня ниже, applicationContext-security.xmlв котором я передаю список фильтров на основе некоторого условия с использованием SpEL, но spring не может проанализировать выражение из-за запятой.

    <bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
    <sec:filter-chain-map path-type="ant">
        <sec:filter-chain pattern="/**"
                          filters="#{ '${portal.okta.login.enabled}' ? 'httpSessionContextIntegrationFilter' : 'httpSessionContextIntegrationFilter,logoutFilter' }" />
    </sec:filter-chain-map>
</bean>

Если вы видите выше : 'httpSessionContextIntegrationFilter,logoutFilter', это создает проблемы. Если я удалю запятую и оставлю только один фильтр, spring разбирает его нормально.

Значение приведенного выше if-else используется как List<Filter>. Как мне это сделать? portal.okta.login.enabledэто просто свойство, которое принимает либо истину, либо ложь.

Ответы

mikeb Oct 12 2020 at 16:13

Согласно документам:

Списки могут быть выражены непосредственно в выражении с использованием нотации {}.

Итак, это должно сработать:

'{httpSessionContextIntegrationFilter,logoutFilter}'

См. 8.5.3 здесь https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html