Spring Boot 3.2 集成最新 Spring Security6 实战

本文档提供了一个Spring Boot 3.2集成Spring Security6实战的例子,针对过时的配置方法进行了更新,并展示了如何使用最新的Lambda表达式配置方式,以简化和清晰化请求处理的调用链路。示例代码经过验证,实现了与旧版相同的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot 3.2 集成最新 Spring Security6 实战

引言

虽然网上已经有很多对于Spring Security6用法的最近用法的介绍,但并没有一个比较完整的示例讲解我们应该如何把以前过时的方法更新到最新的用法。因此,我以自己项目中的security配置为例,提供一个已经验证过的springSecurityFilterChain配置示例,供大伙参考。

调用链路

下面是Spring Security常见Bean在处理请求的调用链路:

/**
 * 处理链路:
 *      login : CookieToHeadersFilter -> ScSecurityContextRepository -> ScAuthenticationManager(优先级高于  SecurityUserDetailsService)  -> AuthenticationSuccessHandler/AuthenticationFailHandler
 *      logout: CookieToHeadersFilter -> ScSecurityContextRepository -> LogoutHandler -> LogoutSuccessHandler
 *      未登录进行 url request: CookieToHeadersFilter -> ScSecurityContextRepository -> ScAuthorizationManager -> ScAuthenticationEntryPoint
 *      登录后进行url request: CookieToHeadersFilter -> ScSecurityContextRepository -> ScAuthorizationManager -> CookieToHeadersFilter(子线程, 可以在前面ScSecurityContextRepository更新token并重新设置请求头)-> 服务接口
 *      鉴权失败: CookieToHeadersFilter -> ScSecurityContextRepository -> ScAuthorizationManager -> ScAuthenticationEntryPoint -> ScAccessDeniedHandler
 */

各个Bean的实现并没有什么变化,不知道怎么写的可以参考这篇博客,里面的很详细:https://blog.youkuaiyun.com/yuan__once/article/details/127022613

过时的写法

在最新版的Spring Security6.x版本中,我们发现以前WebSecurityConfigspringSecurityFilterChain方法配置写法已经过时,包括我们熟悉的and()方法等,官方将在Spring Security7中移除这些过时的方法:
在这里插入图片描述

最新的写法

目前,官方采用Lambda的配置来替代传统的链式配置,示例如下:
在这里插入图片描述
可以看到,这种采用 lambda 表达式的写法能更加清晰地展示 Spring Security 在处理 url 请求的调用链路,不再像以前一样一条链路写到头,又臭又长还显得冗余。经过测试,这种写法之前过时的写法实现的调用链路是完全一致的。
(不枉我摸索半天T^T)

WebSecurityConfig完整代码参考

/**
 * WebSecurityConfig 核心配置
 * @Author: ZenSheep
 * @Date: 2024/2/1 18:34
 */
@Configuration
@EnableWebFluxSecurity
public class WebSecurityConfig {
   
    @Autowired
    CookieToHeadersFilter cookieToHeadersFilter;

    @Autowired
    ScSecurityContextRepository scSecurityContextRepository;

    @Autowired
    ScAuthorizationManager scAuthorizationManager;

    @Autowired
    ScPermitUrlConfig scPermitUrlConfig;

    @Autowired
    ScAccessDeniedHandler scAccessDeniedHandler;

    @Autowired
    ScAuthenticationEntryPoint scAuthenticationEntryPoint;

    @Autowired
    AuthenticationSuccessHandler authenticationSuccessHandler;

    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZenSheep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值