SPEL表达式未动态评估

时间:2015-01-04 10:33:24

标签: spring-security spring-el

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

  

< intercept-url pattern =“/ page”access =“#{new java.io.File('file_path')。exists()}”/>

根据名为file_path的文件的存在来限制URL。

如果加载spring配置文件时file_path存在,则提供访问权限。如果在加载后创建file_path,则不提供访问权限。我希望每次对/ page的请求进行评估时都要对表达式进行评估。不只是在编译表达式时。

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

有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

这是正确的,因为您使用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>