我正在尝试使用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,但没有效果。
有人可以帮我吗?
答案 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>