当前位置: 代码网 > it编程>编程语言>Java > SpringSecurity如何设置白名单策略

SpringSecurity如何设置白名单策略

2024年07月24日 Java 我要评论
在springsecurity中,往往需要对部分接口白名单访问,而大部分在使用security中就有一个误区,那就是免鉴权访问和白名单的区别。大部分的security文章包括官方文档给出免鉴权访问都是

在springsecurity中,往往需要对部分接口白名单访问,而大部分在使用security中就有一个误区,那就是免鉴权访问和白名单的区别。

大部分的security文章包括官方文档给出免鉴权访问都是使用.permitall()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问,但是用户还需要认证.也就是security的认证/授权两个概念.

security白名单策略

将需要放行的白名单使用.ignoring注册.

 @bean
    public websecuritycustomizer ignoringcustomizer() {
        return web -> web.ignoring().requestmatchers(whiteurlarr);
    }

当spring启动后,会将其中每个url注册为一个mvcrequestmatcher并且放入到websecurity中的ignoredrequests管理。

然后在构建websecurity时去创建对应的defaultsecurityfilterchain.

然后这些会被放入到security的过滤链中交给websecurity进行管理,当有请求进入后就会进入到过滤链时,websecurity会去循环调用chian,以获取处理请求路径对应的过滤器组成过滤链,如果未注册ignor则会使用默认的anyrequest,这将返回全部的security过滤器.

    private list<filter> getfilters(httpservletrequest request) {
        int count = 0;
        iterator var3 = this.filterchains.iterator();
        securityfilterchain chain;
        do {
            if (!var3.hasnext()) {
                return null;
            }
            chain = (securityfilterchain)var3.next();
            if (logger.istraceenabled()) {
                ++count;
                logger.trace(logmessage.format("trying to match request against %s (%d/%d)", chain, count, this.filterchains.size()));
            }
        } while(!chain.matches(request));
        return chain.getfilters();
    }

而defaultsecuritychain则会使用其对应的match对请求路径进行匹配,如果匹配上则返回相应的过滤器.

匹配成功返回requestmatchresult:

 通过返回的对象是否为空进行判断是否匹配成功:

匹配成功后会返回其对应的filter,因为是通过igonr去进行忽略的所以filter为空,所以就会忽略对对应路径请求的鉴权等操作.

这就是springsecurity真正的白名单,而不仅仅是对相应路径进行免权访问.

后续会尝试去探索免权访问...

到此这篇关于springsecurity如何正确的设置白名单的文章就介绍到这了,更多相关springsecurity白名单内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com