栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring security 学习 1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring security 学习 1

宽容是谅解,忍耐是蛰伏

一个比喻:spring security 很强大,很复杂,就像政府的行政服务中心,但是好在我们不会所有的业务办理都需要,我们只要关注我们需要的就行了。选择需要的服务,无视那些不需要的,等有需要再去了解。

一直理念:java 体系异常庞大,别动不动就精通,撸遍掩码说明的,人生苦短。

1. 关于认证 authentication 和关于authorization

认证是什么,认证的目的是确认用户存在,本质就是对比用户名和密码。

授权是确定用户存在后,用户可以干什么,干什么就可能对应到角色,角色粒度太大,就可能再缩小到 操作。

permit
n 许可证;执照
v 允许,许可

JAVAEE 的流程 本质户以上股Filter过滤请求,转发到不同的处理模板处理,最后经过业务逻辑处理,返回Response的过程。

2.UsernamePasswordAuthenticationFilter 的简单理解

用户输入username和password

发起请求,进入 UsernamePasswordAuthenticationFilter 处理器

attempt
英 [əˈtempt] 美 [əˈtempt]
n.
企图;试图;尝试;杀人企图;(为超越某事物的)尝试,努力
v.
努力;尝试;试图

尝试认证 attemptAuthentication

过滤器的工作:

  1. 匹配URL和Method 必须是POST
  2. 从request请求中获得username和password
  3. 我们不知道用户名和密码是不是对的,所以我们先构造一个未征得Token对象(UsernamePasswordAuthenticationToken 对象)
  4. 存储这个token对象
  5. 把token对象传个AuthenticationManager 去认证

未认证的token和认证的token 有什么区别?Token 对象的样子(属性和方法)

UsernamePasswordAutenticationToken 用于保存 认证的标识。它就是一个载体对象(为什么java那么喜欢把一切的东西封装成对象?)

3. AuthenticationManager 认证管理器

我们不能只有一种认证方式吧,所以我们有多种AuthenticationProvider 认证提供者,例如UsernamePassword对应的DaoAuthenticationProvider。

AuthenticationManager会注册多种AuthenticationProvider ,让我们有多种选择。

AuthentionManager怎么确定使用按个Provider呢

根据Token类型来确定用什么Provider


public interface AuthenticationProvider {
    Authentication authenticate(Authentication var1) throws AuthenticationException;

    boolean supports(Class var1);
}

认证提供者 接口 ,所有的认证提供者实现都要实现这个接口,接口的supports方法,返回时一个boolean值,参数是一个Class这里就是根据Token的类来确定用什么Provider来处理

所以我们上面封装的未认证对象 token (UsernamePasswordAutenticationToken),传给认证管理器AuthenticationManager ,认证管理器就可以确定用哪个认证提供者来认证了

//Token给谁处理呢?当然是给当前的AuthenticationManager
 return this.getAuthenticationManager().authenticate(token);

因此:我们从AuthenticationManager管理器进入 DaoAuthenticationProvider了

4. DaoAuthenticationProvider

retrieve
英 [rɪˈtriːv] 美 [rɪˈtriːv]
v.
取回;索回;检索数据;扭转颓势;挽回;找回

DaoAutenticationProvider要做什么?

  1. 从Token中取出值 (用户名和密码)
 public Authentication authenticate(Authentication authentication) throws AuthenticationException {
 }

Token这里直接是 Authentication对象了(这里应该是个接口)

  1. 这个token 是不是认证的呢,不知道,我们去缓存中取一下,有了就证明是认证过的了,没有的话就是查数据库了
  2. loadUserByUsername 这个方法就是查询用户的方法
  3. 查到之后就该检验密码了
  4. 如果认证成功系统 就做相应的Session持久化和cookie的会写操作。

参照:https://www.cnblogs.com/ymstars/p/10626786.html

5. 我们自己可以做什么
  1. 自定义AuthenticationToken实现: 不同登录方式使用不同的token

  2. 自定义AuthenticationProcessingFilter实现:用来过滤指定的登录方式,生成对应的自定义AuthenticationToken实现

  3. 自定义AuthenticationProvider实现:针对不同登录方式提供的认证逻辑

  4. 自定义UserDetailsService实现:自定义用户信息查询服务

  5. WebSecurityConfigurerAdapter声明:security信息配置,将前面的自定义对象注入到流程中。

【链接】SpringSecurity文章目录
https://blog.csdn.net/qq_30062125/article/details/86712329

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号