Spring SpEL em XML org.springframework.expression.ParseException: Sem sufixo final '}' para a expressão
Eu tenho o abaixo applicationContext-security.xmlem que estou passando uma lista de filtros com base em alguma condição usando SpEL, mas o spring não é capaz de analisar a expressão devido à vírgula.
<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>
Acima, se você ver : 'httpSessionContextIntegrationFilter,logoutFilter', este é o que está criando problemas. Se eu remover a vírgula e mantiver apenas um filtro, a mola o analisa bem.
O valor do if-else acima é consumido como a List<Filter>. Como devo proceder? portal.okta.login.enabledé apenas uma propriedade que pode ser verdadeira ou falsa.
Respostas
De acordo com a documentação:
As listas podem ser expressas diretamente em uma expressão usando a notação {}.
Então, isso deve bastar:
'{httpSessionContextIntegrationFilter,logoutFilter}'
Veja 8.5.3 aqui https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html