【问题标题】:Spring SpEL in XML org.springframework.expression.ParseException: No ending suffix '}' for expressionXML org.springframework.expression.ParseException 中的 Spring SpEL:表达式没有结尾后缀“}”
【发布时间】:2020-10-12 16:08:53
【问题描述】:

我有下面的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&lt;Filter&gt; 使用。 我应该怎么做? portal.okta.login.enabled 只是一个取真或假的属性。

【问题讨论】:

  • 你能发布整个错误吗?

标签: java spring spring-security


【解决方案1】:

根据文档:

可以使用 {} 表示法直接在表达式中表示列表。

所以应该这样做:

'{httpSessionContextIntegrationFilter,logoutFilter}'

在此处查看 8.5.3 https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html

【讨论】:

  • 我按照你说的添加了它们,但我仍然得到同样的错误。 filters="#{ '${portal.okta.login.enabled}' ? 'httpSessionContextIntegrationFilter' : '{httpSessionContextIntegrationFilter,logoutFilter}' }" /&gt;
猜你喜欢
  • 2014-01-14
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 2022-01-09
相关资源
最近更新 更多