我正在使用Spring 5.1和Spring security 4.2.我使用XML文件配置了访问规则.我的问题是,如何根据Spring安全上下文中的属性编写拦截规则(对URL的访问控制)?也就是说,我有一个变量
productList
在安全上下文中,类型为java.util.ArrayList.如果此列表为空或null,我想限制对URL的访问.我怎么写这个?我有
但当然,上面
length(principal.productList) > 0
表达是完全错误的.有没有正确的方法来写它?最佳答案与安全相关的表达式在Spring中具有非常有限的 *** 作集.您可以通过提供org.springframework.security.access.Expression.SecurityExpressionOperations接口的自定义实现来扩展此集.以下是如何 *** 作的简要指南:
>在SecurityExpressionOperations上创建包装器并实现所需的 *** 作:
class MySecurityExpressionOperations implements SecurityExpressionOperations { private SecurityExpressionOperations delegate; public MySecurityExpressionOperations(SecurityExpressionOperations delegate) { this.delegate = delegate; } public boolean hasProducts() { MyUser user = (MyUser) delegate.getAuthentication().getPrincipal(); return !user.getProductList().isEmpty(); } // Other methods}
>扩展org.springframework.security.web.access.Expression.WebExpressionVoter并替换标准表达式处理程序:
class MyWebExpressionVoter extends WebExpressionVoter { public MyWebExpressionVoter() { setExpressionHandler(new DefaultWebSecurityExpressionHandler() { @OverrIDe protected SecurityExpressionOperations createSecurityExpressionRoot(Authentication authentication,FilterInvocation fi) { SecurityExpressionOperations delegate = super.createSecurityExpressionRoot(authentication,fi); return new MySecurityExpressionOperations(delegate); } }); } }
>提供自定义访问决策管理器:
>应用自定义访问决策管理器:
>使用其他安全 *** 作保护其中一个URL:
总结 以上是内存溢出为你收集整理的如何使用Spring安全性和spring安全对象的属性限制对URL的访问?全部内容,希望文章能够帮你解决如何使用Spring安全性和spring安全对象的属性限制对URL的访问?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)