研究了 Spring Security 的源码后, 我仿写了一个 “乞丐版” 的 Security 框架

开篇

通过上述 4 篇实战文章的讲解, 我们了解了 Spring Security 的基本用法.

本文我会基于对 Spring Security 内部实现原理的理解, 来实现一个 “破产版” 的 Spring Security. 源码地址请参考 mini-security-starter.

写这个的目的是便于读者理解 Spring Security大致思想 , 具体的编码实现不会用到设计模式, 也不会遵循严格的编码规范 或 设计原则. 产出的源码更并不能用于实际开发工作之中.

本文内容全部基于 spring-boot-2.3.2.RELEASE .

正文

一、如何 web 应用的认证和鉴权

看到这个标题, 我们很快能想到一个叫 Filter(过滤器) 的东西, 基于 Filter 我们可以很轻松达到我们的目的, 不管是 servletSpringmvc、还是 Springboot 应用.

当一个请求到服务端时, 就产生了如下图所示的请求链路.

在这里插入图片描述

二、简单回顾一下 Spring Security 的使用

通过前面的系列实战文章, 我们知道, 当我们引入 Spring Security 依赖后, 通过添加如下的配置类, 就能定制化实现我们的各种 认证鉴权 的需求.

@Component
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
   

    @Override
    protected void configure(HttpSecurity http) throws Exception {
   

      	// 访问 api/hello 需要认证
        http.antMatcher("/api/**").authorizeRequests()
          .antMatchers("/api/hello").authenticated();  	
     	// 表单登陆
        http.formLogin();
        // http basic 认证
        http.httpBasic();
      
    }
}

当我学到这里时, 我产生了如下的疑问:

  1. 明面上看, 这个配置跟 Filter 半毛钱关系都没有. 那么它到底怎么起到过滤器的作用的.
  2. Spring 为 Spring Security 预留了什么扩展点, 能让两者完美融合.

三、简述 Spring Security 实现原理

当 Springboot 应用启动时,

  1. Spring 会加载 WebSecurityConfigurerAdapter 的所有实现类, 比如上述的 WebSecurityConfig, 然后放到一个 List 集合中.
  2. 依次执行 WebSecurityConfigurerAdapter#configure(HttpSecurity http) 方法, 获取到一个个 DefaultSecurityFilterChain 对象.
  • 先看下 DefaultSecurityFilterChain 大致长什么样子.
		public class DefaultSecurityFilterChain {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值