spring security登录接口鉴权原理

使用了gateway+spring security,项目当初打算使用gateway统一鉴权的,整合步骤点击此处
当时没有深入security,今天偶然看代码发现验证密码的时候加密了,但是登录表单提交的密码没有加密。看下代码吧

登录接口验证账号密码是否正确

  1. postman登录接口调用
    spring security登录接口鉴权原理_第1张图片

  2. findByUsername方法是登录接口验证密码,我们需要实现此方法来读取数据库账号密码。数据库存储的是明文密码,代码中封装返回值的时候进行加密了,那么内部怎么验证密码一致的呢?
    spring security登录接口鉴权原理_第2张图片

  3. 使用idea打断点查看是谁调用的findByUsername这个方法:
    spring security登录接口鉴权原理_第3张图片
    spring security登录接口鉴权原理_第4张图片
    这样就找到是谁调用的了,然后继续执行,发现这个方法是比对密码的
    spring security登录接口鉴权原理_第5张图片
    spring security登录接口鉴权原理_第6张图片

  4. 发现是加密后的数据库密码前缀代表了加密类型方式
    spring security登录接口鉴权原理_第7张图片
    支持的加密类型:spring security登录接口鉴权原理_第8张图片

  5. 到此获取到了加密方式,继续下一步
    spring security登录接口鉴权原理_第9张图片

  6. 发现是把登录接口入参的账号给加密了,然后判断加密后的密码和数据库表的密码是否一致 在这里插入图片描述
    这个加密逻辑很复杂,就是把密码加密
    spring security登录接口鉴权原理_第10张图片
    spring security登录接口鉴权原理_第11张图片

  7. 这是错误的密码,生成的密文不一致
    在这里插入图片描述

  8. 使用正确的密码调用登录接口,生成的密文一致spring security登录接口鉴权原理_第12张图片
    spring security登录接口鉴权原理_第13张图片
    spring security登录接口鉴权原理_第14张图片

你可能感兴趣的:(spring,cloud)