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>
我正在尝试使用 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>