【发布时间】:2019-02-12 04:27:24
【问题描述】:
我正在使用 Spring 5.1 和 Spring security 4.2。我使用 XML 文件配置了访问规则。我的问题是,如何根据 Spring 安全上下文中的属性编写拦截规则(对 URL 的访问控制)?也就是说,我有一个变量
productList
在 java.util.ArrayList 类型的安全上下文中。如果此列表为空或为空,我想限制对 URL 的访问。我怎么写这个?我有
<http name="defaultSecurity" security-context-repository-ref="myContextRepository"
auto-config="false" use-expressions="true" authentication-manager-ref="authenticationManager"
entry-point-ref="loginUrlAuthenticationEntryPoint">
...
<intercept-url pattern="/myurl" access="length(principal.productList) > 0" />
...
</http>
当然,在上面
length(principal.productList) > 0
表达式完全错误。有没有正确的写法?
【问题讨论】:
-
尝试阅读this如何编写自定义安全表达式
-
此链接讨论使用 Java 自定义安全性,但我想要一个仅依赖于 XML 配置文件且没有 Java 编码的选项。
-
这是不可能的,因为您在类中没有长度方法来评估开箱即用的表达式部分,此外 getProductList 未在公共 Principal 类中定义。请参阅:documentation 和 javadoc WebSecurityExpressionRoot
标签: spring spring-security access-control principal security-context