SPEL 表达式未动态评估

SPEL expressions not evaluated dynamically

我正在尝试使用 spring 安全性过滤 URL。以下是过滤的定义:

URL 受到限制,因为存在名为 file_path 的文件。

如果 file_path 在加载 spring 配置文件时存在,则提供访问权限。如果 file_path 是在加载后创建的,则不提供访问权限。我希望每次对 /page 发出请求时都对表达式求值,而不仅仅是在表达式编译期间。

试图设置系统属性 -Dspring.expression.compiler.mode=MIXED 但没有效果。

谁能帮我解决这个问题?

这是正确的,因为您使用了 configuration time 表达式 (#{...})。要达到要求,您应该使用这样的东西:

<http use-expressions="true">
    <intercept-url pattern="/admin*"
           access="hasRole('admin') and hasIpAddress('192.168.1.0/24')"/>
</http>

参见 Expression-Based Access Control。所以,在你的情况下它可以是这样的:

<http use-expressions="true">
    <intercept-url pattern="/page" access="new java.io.File('file_path').exists()"/>
</http>