SpringBoot版本:2.7.16
SpringSecurity版本:5.7.11
pig4cloud版本:3.7.1-JDK8
pig4cloud是对SpringSecurity的实现,其工作原理脱离不了SpringSecurity;pig4cloud启动首先SecurityAutoConfiguration中,加载SpringBootWebSecurityConfiguration配置、然后在SpringBootWebSecurityConfiguration检查是否添加了自定义配置,如果有执行自定义配置,添加SecurityFilterChainBuilder准备构建SecurityFilterChain;然后将其按照规则构建成对应的SecurityFilterChain交给FilterChainProxy代理。
一、SecurityAutoConfiguration配置类
在这个配置类中可以看到导入了SpringBootWebSecurityConfiguration配置类
二、SecurityFilterAutoConfiguration
是通过AutoConfiguration注解加载,加载在SecurityAutoConfiguration之后;主要是注册DelegatingFilterProxy;
三、SpringBootWebSecurityConfiguration配置类
进入这个配置类可以看到里面有三个内部类SecurityFilterChainConfiguration、ErrorPageSecurityFilterConfiguration、WebSecurityEnablerConfiguration;
1、SecurityFilterChainConfiguration:添加默认的配置,如果自定义了对应的SecurityFilterChain配置的话不会执行
2、ErrorPageSecurityFilterConfiguration:配置错误页面
3、WebSecurityEnablerConfiguration:确保不会出现有了默认配置而没有添加@EnableWebSecurity的问题
四、自定义的AuthorizationServerConfiguration;
从启动流程上来说这个类是什么都无所谓,最主要是接下来就会加载@Configuration配置类;在pig4cloud中在配置中添加了认证登录模式的配置;当然这个配置后边也会构建成SecurityFilterChain;
五、WebSecurityConfiguration(SpringSecurity的)
然后加载WebSecurityConfiguration此配置类,从原理上看,此配置类是一个@Configuration注解加持的配置类,
然后在这个类中加载自定义的配置类,并将其通过addSecurityFilterChainBuilder做成SecurityFilterChain;
六、WebSecurityConfiguration(自定义的)
可以看到虽然名字和SpringSecurity的一样,但是注解是@EnableWebSecurity;通过这个注解就会让SpringSecurity加载这个配置,忽略默认的配置;可以看到pig4cloud在此配置中设置了自定义的登录表单、设置了自定义的Provider;
然后做了一个SecurityFilterChain去做资源放行;
然后再回到默认的WebSecurityConfiguration中进行build;具体build可以参考我之前的文章: