Spring SpEL dans XML org.springframework.expression.ParseException: pas de suffixe de fin '}' pour l'expression

Oct 12 2020

J'ai ci-dessous applicationContext-security.xmldans lequel je passe une liste de filtres basés sur une condition utilisant SpEL mais spring n'est pas capable d'analyser l'expression en raison de la virgule.

    <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>

Ci-dessus, si vous voyez : 'httpSessionContextIntegrationFilter,logoutFilter', c'est celui qui crée des problèmes. Si je supprime la virgule et que je ne garde qu'un seul filtre, le ressort analyse bien.

La valeur de if-else ci-dessus est consommée sous forme de List<Filter>. Comment dois-je procéder? portal.okta.login.enabledest juste une propriété qui prend soit vrai soit faux.

Réponses

mikeb Oct 12 2020 at 16:13

Selon la documentation:

Les listes peuvent être exprimées directement dans une expression en utilisant la notation {}.

Donc, cela devrait le faire:

'{httpSessionContextIntegrationFilter,logoutFilter}'

Voir 8.5.3 ici https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html