SpringSecurity源码分析【一】

为什么引入SpringSecurity依赖就会对所有的请求进行控制

引入Spring Security后Springboot会对这个类SpringBootWebSecurityConfiguration进行默认配置

/*
	类的生效条件
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnDefaultWebSecurity
//满足条件:运行的容器是一个Servlet容器
@ConditionalOnWebApplication(type = Type.SERVLET)
class SpringBootWebSecurityConfiguration {

	@Bean
	@Order(SecurityProperties.BASIC_AUTH_ORDER)
  	//传入Http请求
	SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
      
      	//authorizeRequests() 开启请求的权限认证
      	//anyRequest() 任何请求都开启
      	//authenticated() 认证
      	//支持formLogin()【表单认证】和httpBasic() 认证
		http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();
		return http.build();
	}

}

满足条件

当运行的容器是一个Servlet容器
@ConditionalOnWebApplication(type = Type.SERVLET)

@ConditionalOnDefaultWebSecurity

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(DefaultWebSecurityCondition.class)
public @interface ConditionalOnDefaultWebSecurity {

}
class DefaultWebSecurityCondition extends AllNestedConditions {

	DefaultWebSecurityCondition() {
		super(ConfigurationPhase.REGISTER_BEAN);
	}
	//在当前的类路径中有 SecurityFilterChain、HttpSecurity这两个类就会启用默认配置
	@ConditionalOnClass({ SecurityFilterChain.class, HttpSecurity.class })
	static class Classes {

	}
	//在现有的工厂中没有找到WebSecurityConfigurerAdapter、SecurityFilterChain类的实例就会生效
  	//如果我们自己写的类继承了WebSecurityConfigurerAdapter、SecurityFilterChain这两个类的实例
  	//当前条件不满足 默认情况就会失效
	@ConditionalOnMissingBean({ WebSecurityConfigurerAdapter.class, SecurityFilterChain.class })
	static class Beans {

	}

}

总结:

条件一:

当运行的容器是一个Servlet容器

条件二

在当前的类路径中有 SecurityFilterChainHttpSecurity这两个类就会启用默认配置
在现有的工厂中没有找到WebSecurityConfigurerAdapterSecurityFilterChain类的实例就会生效

当我们不需要启用默认配置时只需要自定义方法覆盖WebSecurityConfigurerAdapter即可

@Configuration
@Slf4j
public class MyWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //实现自己的逻辑即可
    }
}
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值