创建数据库

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

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

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

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

创建实体类

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

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

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

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

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

创建mapper

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

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

security配置类

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

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

测试

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

访问/two和/three页面:

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

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

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

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

SpringBootSecurity学习(08)网页版登录整合MyBatis的更多相关文章

  1. SpringBootSecurity学习(07)网页版登录整合JDBC

    数据库中定义用户 前面我们定义用户是在配置文件和代码中定义死的默认用户,一般在开发中是不会这样做的,我们的用户都是来自我们的用户表,存储在数据库中.操作数据库的技术有很多,spring securit ...

  2. Mybatis学习(六)————— Spring整合mybatis

    一.Spring整合mybatis思路 非常简单,这里先回顾一下mybatis最基础的根基, mybatis,有两个配置文件 全局配置文件SqlMapConfig.xml(配置数据源,全局变量,加载映 ...

  3. Java开发学习(三十九)----SpringBoot整合mybatis

    一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...

  4. SpringBootSecurity学习(01)网页版登录入门介绍

    Web应用安全管理 Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.权限管理的设计一般使用角色 ...

  5. SpringBootSecurity学习(03)网页版登录添加自定义登录页面

    自定义登录页面 前面无论是使用默认配置,还是自定义配置类,都是使用的springboot-security自带的登录页面,自带的登录页面在这个版本虽然设计的非常不错,但是在实际开发中,我们通常还是使用 ...

  6. SpringBootSecurity学习(04)网页版登录其它授权和登录处理

    其它授权配置 security的配置类中,对所有路径进行了统一授权配置.但是有的内容我们也需要让未登录游客有权限访问,比如js,css等静态文件,还有一些宣传页面等等.这些路径可以单独配置: 我们来试 ...

  7. SpringBootSecurity学习(05)网页版登录内存中配置默认用户

    默认用户 前面的例子中我们使用的都是配置文件中配置好的默认用户: 除了可以配置账号密码,还可以在配置文件中配置角色: 这个角色是后面实现权限过滤的重要内容,后面会重点讨论. 在内存中配置默认用户 这样 ...

  8. SpringBootSecurity学习(06)网页版登录方法级别的权限

    用户授权 前面讨论过,Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.前面介绍了登录,下面简单 ...

  9. SpringBootSecurity学习(09)网页版登录配置Session共享

    场景 当后台项目由部署在一台改为部署在多台以后,解决session共享问题最常用的办法就是把session存储在redis等缓存中.关于session和cookie概念这里就不再赘述了,在spring ...

随机推荐

  1. Leetcode之回溯法专题-78. 子集(Subsets)

    Leetcode之回溯法专题-78. 子集(Subsets) 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = ...

  2. JVM内存分配及String常用方法

    一,JVM内存分配和常量池 ​ 在介绍String类之前,先来简单分析一下在JVM中,对内存的使用是如何进行分配的.如下图所示(注意:在jdk1.8之后便没有方法区了): ​ ​ 如上JVM将内存分为 ...

  3. 【Leetcode】【简单】【217. 存在重复元素】【JavaScript】

    题目描述 217. 存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [ ...

  4. 第6章 面向对象的程序设计 6.1 javascript对象

    ECMA-262 把对象定义为: “无序属性的集合, 其属性可以包含基本值. 对象或者函数. ” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到 ...

  5. Installing the JMeter CA certificate for HTTPS recording

    参考: http://jmeter.apache.org/usermanual/component_reference.html#HTTP(S)_Test_Script_Recorder User m ...

  6. 2019 Multi-University Training Contest 8

    2019 Multi-University Training Contest 8 C. Acesrc and Good Numbers 题意 \(f(d,n)\) 表示 1 到 n 中,d 出现的次数 ...

  7. 牛客小白月赛6 J 洋灰三角 数学

    链接:https://www.nowcoder.com/acm/contest/136/J来源:牛客网 题目描述     洋灰是一种建筑材料,常用来筑桥搭建高层建筑,又称,水泥.混凝土.     WH ...

  8. bzoj 1146 网络管理Network (CDQ 整体二分 + 树刨)

    题目传送门 题意:求树上路径可修改的第k大值是多少. 题解:CDQ整体二分+树刨. 每一个位置上的数都会有一段持续区间 根据CDQ拆的思维,可以将这个数拆成出现的时间点和消失的时间点. 然后通过整体二 ...

  9. 背包形动态规划 fjutoj2375 金明的预算方案

    金明的预算方案 TimeLimit:1000MS  MemoryLimit:128MB 64-bit integer IO format:%lld   Problem Description 金明今天 ...

  10. HDU 1173 采矿

    采矿 题解:如果给你一条线段(左右端点设为A,B), 那么在这条线上的任意一点到A B距离之和是一个定值, 然后如果再这条线段内在任意确定一个定点C, 那么这条线段上再任意取一个点,这个点到 A B ...