如何使用Spring安全性和spring安全对象的属性限制对URL的访问?

如何使用Spring安全性和spring安全对象的属性限制对URL的访问?,第1张

概述我正在使用Spring 5.1和Spring security 4.2.我使用XML文件配置了访问规则.我的问题是,如何根据Spring安全上下文中的属性编写拦截规则(对URL的访问控制)?也就是说,我有一个变量productList 在安全上下文中,类型为java.util.ArrayList.如果此列表为空或null,我想限制对URL的访问.我怎么写这个

我正在使用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的访问?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1258225.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)