SpringSecurity之基本原理

目录

核心过滤器

FilterSecurityInterceptor

ExceptionTranslationFilter

UsernamePasswordAuthenticationFilter

BasicAuthenticationFilter

过滤器加载过程

重要接口

UserDetailsService接口

PasswordEncoder接口


springSecurity本质上就是一个过滤器链,由很多个过滤器组成,从启动是可以获取到过滤器链,当执行请求时就会执行相应的过滤器。

SpringSecurity之基本原理_第1张图片

 这些过滤器在系统启动时springboot会自动都配置完成

核心过滤器
FilterSecurityInterceptor

是一个方法级的权限过滤器, 基本位于过滤链的最底部

1.继承Filter方法

2.调用invoke方法

3.invoke方法

SpringSecurity之基本原理_第2张图片

 super.beforeInvocation(filterInvocation) 表示查看之前的 filter 是否通过。
filterInvocation.getChain().doFilter(filterInvocation.getRequest(), filterInvocation.getResponse());表示真正的调用后台的服务。

ExceptionTranslationFilter

异常过滤器,用来处理在认证授权过程中抛出的异常

核心方法doFilter:

SpringSecurity之基本原理_第3张图片

UsernamePasswordAuthenticationFilter

对/login 的 POST 请求做拦截,校验表单中用户名,密码;

找到核心方法attemptAuthentication:

SpringSecurity之基本原理_第4张图片

BasicAuthenticationFilter

主要用于处理httpBasic登录

SpringSecurity之基本原理_第5张图片

 先检查请求头中是否有basic开头Authentication的信息,如果有,会尝试进行base64解码,然后取出用户名和密码,尝试进行登录;如果没有,就回放过该请求,交给下一个过滤器处理

过滤器加载过程

1.使用SpringSecurty配置过滤器,也就是SpringBoot项目中自动配置的DelegatingFilterProxy

SpringSecurity之基本原理_第6张图片

 而在doFilter()方法各种判断过后调用了initDelegate()方法,在该方法里可以获取到FilterChainProxy对象

SpringSecurity之基本原理_第7张图片

 2.在FilterChainProxy也会进入doFilter()方法,然后再进行各种判断后,会进入doFilterInternal()方法

SpringSecurity之基本原理_第8张图片

 而在doFilterInternal()方法中会将过滤器链中的过滤器加载进来,进行逐个执行

SpringSecurity之基本原理_第9张图片

重要接口
UserDetailsService接口

自定义逻辑控制认证逻辑;查询数据库中的用户名和密码

SpringSecurity之基本原理_第10张图片

 返回值 UserDetails,这个类是系统默认的用户“主体”;

方法参数 username:表示用户名。此值是客户端表单传递过来的数据。默认情况下必须叫 username,否则无法接收

PasswordEncoder接口

用来数据加密;

SpringSecurity之基本原理_第11张图片

 实现类

BCryptPasswordEncoder 是 Spring Security 官方推荐的密码解析器,平时多使用这个解析器。
BCryptPasswordEncoder 是对 bcrypt 强散列方法的具体实现。是基于 Hash 算法实现的单向加密。可以通过 strength 控制加密强度,默认10

SpringSecurity之基本原理_第12张图片

你可能感兴趣的:(SpringSecurity,java)