Spring SpEL in XML org.springframework.expression.ParseException: Kein Endsuffix '}' für Ausdruck

Oct 12 2020

Ich habe das Folgende, applicationContext-security.xmlin dem ich eine Liste von Filtern übergebe, die auf einer bestimmten Bedingung mit SpEL basieren, aber spring kann den Ausdruck aufgrund von Komma nicht analysieren.

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

Wenn Sie oben sehen : 'httpSessionContextIntegrationFilter,logoutFilter', ist dies derjenige, der Probleme verursacht. Wenn ich Komma entferne und nur einen Filter behalte, analysiert Spring es gut.

Der Wert des obigen if-else wird als a verwendet List<Filter>. Wie soll ich vorgehen? portal.okta.login.enabledist nur eine Eigenschaft, die entweder wahr oder falsch ist.

Antworten

mikeb Oct 12 2020 at 16:13

Laut den Dokumenten:

Listen können direkt in einem Ausdruck mit der Notation {} ausgedrückt werden.

Das sollte es also tun:

'{httpSessionContextIntegrationFilter,logoutFilter}'

Siehe 8.5.3 hier https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html