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

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

开发者学堂课程【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才能登录成功。

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

相关文章
|
5月前
|
开发工具 git
大世界项目14-权限拦截控制_未登录无法看到正常页面
大世界项目14-权限拦截控制_未登录无法看到正常页面
|
6月前
|
存储 前端开发 Java
①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态
①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态
185 0
|
存储 NoSQL Java
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 下
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 下
164 0
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能   下
|
存储 缓存 NoSQL
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 上
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能 上
140 0
社会你“小峰哥“用Java实现了管理员可以修改任意用户Session的功能   上
|
前端开发 安全 JavaScript
【web渗透思路】任意账号的注册、登录、重置、查看
【web渗透思路】任意账号的注册、登录、重置、查看
787 0
【web渗透思路】任意账号的注册、登录、重置、查看
|
缓存 NoSQL Java
用户重复登录|学习笔记
快速学习用户重复登录
231 0
用户重复登录|学习笔记
|
安全 Java 开发者
案例之资源服务中加入校验用户所需对象|学习笔记
快速学习案例之资源服务中加入校验用户所需对象
案例之资源服务中加入校验用户所需对象|学习笔记
|
JSON 安全 前端开发
如何认证当前的操作用户?
如何认证当前的操作用户?
配置流转的时候提示非法RAM 角色如何处理
原因 : 流转的目的地产品的角色不符合需要 解决办法 : 删除原来访问控制里面的建的角色 ,重新通过流转页面提示自动建一个对应的角色
160 0
配置流转的时候提示非法RAM 角色如何处理