Day05 SpringSecurity认证授权
文章目录
一、基本概念
请求认证: 判断一个用户是否为合法用户的处理过程,最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确,如下图所示:
授权: 就是用户登录后,控制用户是否有权限访问某些资源。如下图所示:
SpringSecurity基本原理
各种过滤器
二、利用Springsecurity从数据库获取用户信息
UserDetails 的作用
UserDetails 在 Spring Security 框架中主要担任获取用户信息的接口,通过该接口就能拿到用户的信息和验证用户的信息。项目中我们自定义UserAuth 类使得可以Spring Security 中管理用户的身份信息,处理登录认证以及基于角色或权限的授权。
方法名 | 作用 |
---|---|
Collection<? extends GrantedAuthority> getAuthorities() | 授予用户的权限 |
String getPassword() | 用户的密码(当前密码是经过加密后的) |
String getUsername() | 获取用户名 |
boolean isAccountNonExpired() | 用户的账号是否过期(true 未过期 false 已过期) |
boolean isAccountNonLocked() | 用户的账号是否被锁定(true 未被锁定 false 被锁定) |
boolean isCredentialsNonExpired() | 用户的凭据(密码)是否已过期(true 未过期 false 已过期) |
boolean isAccountNonExpired() | 用户是否启用(true 启用 false 禁用) |
securityFilterChain方法会在应用启动时自动被调用,创建一个SecurityFilterChain Bean,并被Spring Security注册到过滤器链中。
三、SpringSecurity整合jwt
四、自定义授权管理器
将用户信息存入上下文用到了ThreadLocal类。
ThreadLocal 的工作原理
ThreadLocal 提供了一种线程隔离的机制,每个线程都会有自己独立的变量副本,这样可以避免多线程操作共享变量时出现的数据竞争。
subjectThreadLocal 是一个 ThreadLocal 对象。
通过 setSubject(String subject) 方法,数据被设置到当前线程的局部变量中。
当调用 getSubject() 时,ThreadLocal 返回当前线程所存储的值。
本人水平有限,有错的地方还请批评指正。
什么是精神内耗?
简单地说,就是心理戏太多,自己消耗自己。
所谓:
言未出,结局已演千百遍;
身未动,心中已过万重山;
行未果,假想灾难愁不展;
事已闭,过往仍在脑中演。