赞
踩
虽然网上已经有很多对于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.csdn.net/yuan__once/article/details/127022613
在最新版的Spring Security6.x版本中,我们发现以前WebSecurityConfig的springSecurityFilterChain方法配置写法已经过时,包括我们熟悉的and()方法等,官方将在Spring Security7中移除这些过时的方法:
目前,官方采用Lambda的配置来替代传统的链式配置,示例如下:
可以看到,这种采用 lambda 表达式的写法能更加清晰地展示 Spring Security 在处理 url 请求的调用链路,不再像以前一样一条链路写到头,又臭又长还显得冗余。经过测试,这种写法之前过时的写法实现的调用链路是完全一致的。
(不枉我摸索半天T^T)
/** * 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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。