之所以想写这一系列,是因为之前工作过程中使用Spring Security,但当时基于spring-boot 2.3.x,其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0,结果一看Spring Security也升级为6.3.0,关键是其风格和内部一些关键Filter大改,导致在配置同样功能时,多费了些手脚,因此花费了些时间研究新版本的底层原理,这里将一些学习经验分享给大家。
注意:由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 spring-boo-3.3.0(默认引入的Spring Security是6.3.0),JDK版本使用的是19,所有代码都在spring-security-study项目上:https://github.com/forever1986/spring-security-study.git
目录
这一章我们将讲述两个Spring Security常见的功能,一个是白名单,一个是跨越处理。
1 免鉴权白名单
我们在系列五中看到过配置访问权限的,如下图

在实际业务中,我们经常需要某些服务是免鉴权的,比如登录接口、静态资源等等,这时候我们往往需要在代码处增加。最好做到配置与代码分离,因此,这里使用配置化免鉴权白名单。
原理:配置类有一个方法是可以传入RequestMatcher,因此我们可以通过配置组装RequestMatcher,传入进去
1.1 代码实现
代码参考lesson11子模块
1)新建lesson11子模块,其pom引入以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--Spring Boot 提供的 Security 启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
2)配置yaml文件
security:
# 白名单
ignoreUrls:
- httpMethod: 'GET'
url: '/demo/get*'
- httpMethod: 'POST'
url: '/demo/post2'
3)配置读取yaml的配置类IgnoreUrlsProperties以及存储对象WhiteDTO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WhiteDTO {
private String httpMethod;
private String url;
}
@Data
@ConfigurationProperties("security")
public class IgnoreUrlsProperties {
private List<WhiteDTO> ignoreUrls = new ArrayList<>();
public RequestMatcher[] getRequestMatcher(){
List<RequestMatcher> requestMatchers = new ArrayList<>();
ignoreUrls.stream



1120

被折叠的 条评论
为什么被折叠?



