SpringSecurity之基本原理

目录

核心过滤器

FilterSecurityInterceptor

ExceptionTranslationFilter

UsernamePasswordAuthenticationFilter

BasicAuthenticationFilter

过滤器加载过程

重要接口

UserDetailsService接口

PasswordEncoder接口


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

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

核心过滤器
FilterSecurityInterceptor

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

1.继承Filter方法

2.调用invoke方法

3.invoke方法

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

ExceptionTranslationFilter

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

核心方法doFilter:

UsernamePasswordAuthenticationFilter

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

找到核心方法attemptAuthentication:

BasicAuthenticationFilter

主要用于处理httpBasic登录

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

过滤器加载过程

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

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

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

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

重要接口
UserDetailsService接口

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

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

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

PasswordEncoder接口

用来数据加密;

 实现类

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值