zoukankan      html  css  js  c++  java
  • SpringBootSecurity学习(08)网页版登录整合MyBatis

    创建数据库

    前面介绍了springboot-security整合jdbc从数据库中查询用户的方式,适用性有限,下面介绍最常用的整合MyBatis,这种在开发和生产环境中是最常用,也是最实用的。首先需要创建数据库表,我们来创建三张表,分别是用户表,角色表,还有用户角色表,首先看用户表:

    file

    只有三个字段,具体业务中需要几个字段完全由我们自己设计。密码是admin,是加密的,后面的配置中会看到加密方式,与前面介绍的在内存中配置默认用户的方式类似。下面看角色表:

    file

    注意每个角色名字的前面都加了一个ROLE_前缀,最后来看用户角色表:

    file

    我们给用户只分配了一个角色。

    创建实体类

    我们从基本做起,来创建实体类,首先创建角色实体类 SysRole,

    file

    除了基本的id和role字段,SysRole还实现了GrantedAuthority接口,实现了getAuthority方法,这个方法返回的就是角色的名字,后面会看到专门实现这个接口的好处。下面来看用户实体类 SysUser:

    file

    用户名最好是username,密码最好是password,这样命名是security默认支持的命名。这个是原生的用户实体类,除了id和用户名密码,加入了一个角色列表属性,用以返回当前用户拥有哪些角色,不过为了配合security的使用,最好给用户实体类实现一个接口UserDetails:

    file

    然后实现接口的下面几个方法:

    file

    其中比较重要的是最后一个获取角色列表的方法,这是security默认的方法。由于我们角色实体类实现了GrantedAuthority接口,所以这里可以直接返回上面定义的角色列表。还有一些其它的属性都是security默认设计的用户属性,从字面意思可以看出是判断超时,锁定,能否登陆之类的,如果想用可以定义对应的字段,如果不想用直接返回true即可。

    创建mapper

    在springboot中整合mybatis就不再介绍了。下一步创建mapper接口,内容很简单,就是根据用户名查询用户:

    file

    来看sql语句,我们要一步到位,把用户和用户拥有的角色都查出来,这里使用一个一对多查询:

    file

    security配置类

    配置类中把前面的jdbc配置可以删除了,我们来重写两个方法,配置用户名密码的验证和密码的加密:

    file

    这里我们查询到用户的时候直接返回的用户,是因为用户类实现了对应的接口,所以操作很方便,而且返回的内容中包含了角色信息。下面在auth中配置了登录验证方式和密码加密方式。

    测试

    上面的内容以及配置完了,我们重启项目就可以使用admin/admin登录:

    file

    file

    访问/two和/three页面:

    file

    可以看到以非常个性化的自定义方式完成了用户的认证和授权。来查看当前用户信息:

    file

    在实际的开发中,用户表肯定会有更加丰富的字段,使用用户类实现UserDetails接口的形式能更好的获取用户信息。

    注意,新增用户的时候,密码要使用 new BCryptPasswordEncoder().encode("admin") 的方式加密,新增角色的时候,前面要加上ROLE_前缀,这是默认的规则。

    代码地址:https://gitee.com/blueses/spring-boot-security 08

  • 相关阅读:
    CLR c++/CLI 如何返回多个返回值
    在php 中显示array数据
    MVC已死,该是用MOVE的时候了
    拿到网规证书后,办北京户口的遭遇。
    利亚德股票限售股解禁表
    32位MSSQL数据库备份如何在64位MSSQL数据库上恢复
    利用DNS实现负载均衡
    购买服务器具体和什么参数有关
    简单来总结一下C++与C#之间的区别
    c# 操作DOS ping命令判断与指定主机是否可以通信
  • 原文地址:https://www.cnblogs.com/guos/p/11613943.html
Copyright © 2011-2022 走看看