认证用户状态的判断|学习笔记

简介: 快速学习认证用户状态的判断

开发者学堂课程【Spring Security知识精讲与实战演示(二)认证用户状态的判断】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/731/detail/13041


认证用户状态的判断

 

启动项目,会进入登录页面。

进入数据库,目前用户有两个,分别是小明,小马。小明的状态是0,小马的状态是1。

分别登录小明、小马,密码123,显示可以正常登录。

虽然认证做完,但并没有用到状态信息,接下来要利用状态信息,让用户拥有状态。在企业开发中用户是要有状态的,如果没有状态,有些用户可能会恶意操作系统,假设要封锁他的账号,没有状态是无法实现的,只有将数据库数据删除,但是企业开发中一般不会真正的删除数据,一般是拉入黑名单状态。在企业开发中状态会非常多,根据不同业务可以设置很多状态,现在数据库中只有两个:

image.png

下面是认证的部分业务逻辑:

SysUser sysUser = userDao.findByName(username);

if(sysUser==null) {

return null;

}

List<SimpleGrantedAuthority> authorities = new ArrayList<>();

List<SysRole> roles = sysUser.getRoles();

for (SysRole role : roles){

authorities.add(new SimpleGrantedAuthority(role.getRol

eName()));

// {noop} 后面的密码,springsecurity 会认为是原文。

UserDetails userDetails = new User(sysUser.getUsername(),sysUser.getPassword(),authorities);

return userDetails;

UserDetails userDetails = new User(sysUser.getUsername(),sysUser.getPassword(),authorities);这一句的作用是将自己的用户对象翻译成Spring security的用户对象,也就是自定义的对象sysUser,Spring security的用户对象是UserDetails,但Spring security不认识用户自定义的对象,只是别UserDetails。所以要将这两个用户对象进行转换或者翻译。在这里面,在进行翻译时,用的是user,注意这是Spring security提供的。

点进原码:

public User(String username,String password,Collection<? extends Granteduthority> authorities){

public User(String username,String password, boolean enabled, boolean accountlonExpired, boolean credentialsNonExpired,boolean accountNonLocked,Collection<? extends GrantedAuthority>authorities) {

可以看到,这个构造方法里比上面多了四个布尔类型的构造参数,其实我们使用的三个构造参数的构造方法里这四个布尔值默认都被赋值为 true, boolean 的意思可点击右上角 Download Sources 下载原码查看解释:

boolean enabled 是否可用

boolean accountNonExpired 账户是否失效

账户失效可以是触犯法律或者用户不再使用

boolean credentialsNonExpired 秘密是否失效

一般为了账号安全,有些公司的密码隔段时间就会更改

boolean accbuntNonLocked 账户是否锁定

当四个布尔值默认值都为 true 才能进行使用。

演示一个默认值不为 TRUE 的情况,更改代码:

SysUser sysUser = userDao.findByName(username);

if(sysUser==null) {

return null;

}

List<SimpleGrantedAuthority> authorities = new ArrayList<>();

List<SysRole> roles = sysUser.getRoles();

for (SysRole role : roles){

authorities.add(new SimpleGrantedAuthority(role.getRol

eName()));

// {noop} 后面的密码,springsecurity 会认为是原文。

UserDetails userDetails = new User(sysUser.getUsername(),sysUser.getPassword(),

enabled:sysUser.getStatus ()==1,

accountNonExpired: true,

credentialsNonExpired: true,

accountNonLocked: true,

authorities);

return userDetails;

在企业开发中,accountNonExpired,credentialsNonExpired,accountNonLocked也需要进行判断。

之后对项目进行双击测试状态

image.png

访问小马,状态为1,访问成功;访问小明,显示登录失败,失败原因:是个布尔值必须都为TRUE才能登录成功。

在企业开发中,用户状态判断一定要做,但用几个状态根据公司业务判定。

相关文章
|
弹性计算 IDE 安全
打造在线编程环境
打造自己的在线编程环境,使用Coding WebIDE来实现在线的IDE,以便我们在不方便使用本地编辑器的时候可以使用在线编辑器来进行我们的在线编辑操作。
打造在线编程环境
|
前端开发 Java 数据安全/隐私保护
聊聊 OAuth 2.0 的 Token 续期处理
Token 校验逻辑 // CheckTokenEndpoint.checkToken @RequestMapping(value = "/oauth/check_token") @ResponseBody public Map checkToken(@RequestPara.
2324 0
Vue3报错:Extraneous non-props attributes (style) were passed to component but could not be automatical
Vue3报错:Extraneous non-props attributes (style) were passed to component but could not be automatical
4890 1
|
6月前
|
SQL 关系型数据库 MySQL
MySQL 进行 select 查询时 where 条件中 in 的value数过多却导致无记录返回
MySQL 进行 select 查询时 where 条件中 in 的value数过多返回不符合预期怎么办?会不会遇到bug了?
290 0
|
缓存 负载均衡 监控
解决邮件延迟问题
【10月更文挑战第21天】
|
算法 Java C++
branch and price求解VRPTW问题代码详解
branch and price求解VRPTW问题代码详解
889 0
branch and price求解VRPTW问题代码详解
|
SQL 关系型数据库 MySQL
postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用
postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用
1396 0
springboot使用邮件服务
springboot使用邮件服务
531 0
|
C++
Vscode 内存过高的解决办法
Vscode 内存过高的解决办法
2633 0
|
前端开发
el-upload上传一张图片后显示缩略图并隐藏添加图片按钮
el-upload上传一张图片后显示缩略图并隐藏添加图片按钮
1862 1