SpringSecurity如何设置白名单策略

 更新时间:2024年07月24日 10:05:32   作者:VermouthSp  
这篇文章主要介绍了SpringSecurity如何设置白名单策略,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

在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白名单内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用mybatis-plus报错Invalid bound statement (not found)错误

    使用mybatis-plus报错Invalid bound statement (not found)错误

    这篇文章主要介绍了使用mybatis-plus报错Invalid bound statement (not found)错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java使用HttpClient实现图片下载与本地保存功能

    Java使用HttpClient实现图片下载与本地保存功能

    在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都显得尤为重要,本文将通过一个具体的Java实战案例,详细介绍如何使用Apache HttpClient库实现图片的下载与本地保存功能
    2025-06-06
  • SSM项目中配置LOG4J日志的方法

    SSM项目中配置LOG4J日志的方法

    本篇文章主要介绍了SSM项目中配置LOG4J日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • MyBatis实现动态SQL模糊查询的示例代码

    MyBatis实现动态SQL模糊查询的示例代码

    在数据库查询中,模糊查询是最常用的功能之一,今天我们来探讨如何通过动态SQL实现灵活、安全的模糊查询,文中的示例代码讲解详细,有需要的小伙伴可以了解下
    2026-02-02
  • 在idea中显示springboot面板的方法

    在idea中显示springboot面板的方法

    这篇文章主要介绍了在idea中显示springboot面板的方法方便启动调试,本文通过代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java实现url加密处理的方法示例

    Java实现url加密处理的方法示例

    这篇文章主要介绍了Java实现url加密处理的方法,涉及java基于base64、编码转换实现加密解密相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • Java多线程中的Interrupt简析

    Java多线程中的Interrupt简析

    这篇文章主要介绍了Java多线程中的Interrupt简析,Interrupt 的其作用是"中断"线程, 但实际上线程仍会继续运行, 这是一个非常容易混淆的概念,Interrupt 的真正作用是给线程对象设置一个中断标记, 并不会影响线程的正常运行,需要的朋友可以参考下
    2023-09-09
  • SpringBoot打成jar包瘦身方法总结

    SpringBoot打成jar包瘦身方法总结

    springBoot打包的时候代码和jar包打包在同一个jar包里面,会导致jar包非常庞大,下面这篇文章主要给大家介绍了关于SpringBoot打的jar包瘦身方法的相关资料,需要的朋友可以参考下
    2022-12-12
  • Spring Cache自定义缓存key和过期时间的实现代码

    Spring Cache自定义缓存key和过期时间的实现代码

    使用 Redis的客户端 Spring Cache时,会发现生成 key中会多出一个冒号,而且有一个空节点的存在,查看源码可知,这是因为 Spring Cache默认生成key的策略就是通过两个冒号来拼接,本文给大家介绍了Spring Cache自定义缓存key和过期时间的实现,需要的朋友可以参考下
    2024-05-05
  • MyBatis-Plus流式查询的实现示例

    MyBatis-Plus流式查询的实现示例

    MyBatis-Plus 从 3.5.4 版本开始支持流式查询,通过ResultHandler接口实现结果集的流式查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12

最新评论