Spring SpEL in XML org.springframework.expression.ParseException: nessun suffisso finale '}' per l'espressione

Oct 12 2020

Ho il seguente applicationContext-security.xmlin cui sto passando un elenco di filtri basati su alcune condizioni utilizzando SpEL ma la primavera non è in grado di analizzare l'espressione a causa della virgola.

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

Sopra, se vedi : 'httpSessionContextIntegrationFilter,logoutFilter', questo è quello che crea problemi. Se rimuovo la virgola e mantengo solo il filtro singolo, spring lo analizza bene.

Il valore di if-else di cui sopra viene consumato come a List<Filter>. Come dovrei farlo? portal.okta.login.enabledè solo una proprietà che accetta true o false.

Risposte

mikeb Oct 12 2020 at 16:13

Secondo i documenti:

Gli elenchi possono essere espressi direttamente in un'espressione utilizzando la notazione {}.

Quindi questo dovrebbe farlo:

'{httpSessionContextIntegrationFilter,logoutFilter}'

Vedi 8.5.3 qui https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html