SpringBootSecurity学习(08)网页版登录整合MyBatis
创建数据库
前面介绍了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的更多相关文章
- SpringBootSecurity学习(07)网页版登录整合JDBC
数据库中定义用户 前面我们定义用户是在配置文件和代码中定义死的默认用户,一般在开发中是不会这样做的,我们的用户都是来自我们的用户表,存储在数据库中.操作数据库的技术有很多,spring securit ...
- Mybatis学习(六)————— Spring整合mybatis
一.Spring整合mybatis思路 非常简单,这里先回顾一下mybatis最基础的根基, mybatis,有两个配置文件 全局配置文件SqlMapConfig.xml(配置数据源,全局变量,加载映 ...
- Java开发学习(三十九)----SpringBoot整合mybatis
一.回顾Spring整合Mybatis Spring 整合 Mybatis 需要定义很多配置类 SpringConfig 配置类 导入 JdbcConfig 配置类 导入 MybatisConfig ...
- SpringBootSecurity学习(01)网页版登录入门介绍
Web应用安全管理 Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.权限管理的设计一般使用角色 ...
- SpringBootSecurity学习(03)网页版登录添加自定义登录页面
自定义登录页面 前面无论是使用默认配置,还是自定义配置类,都是使用的springboot-security自带的登录页面,自带的登录页面在这个版本虽然设计的非常不错,但是在实际开发中,我们通常还是使用 ...
- SpringBootSecurity学习(04)网页版登录其它授权和登录处理
其它授权配置 security的配置类中,对所有路径进行了统一授权配置.但是有的内容我们也需要让未登录游客有权限访问,比如js,css等静态文件,还有一些宣传页面等等.这些路径可以单独配置: 我们来试 ...
- SpringBootSecurity学习(05)网页版登录内存中配置默认用户
默认用户 前面的例子中我们使用的都是配置文件中配置好的默认用户: 除了可以配置账号密码,还可以在配置文件中配置角色: 这个角色是后面实现权限过滤的重要内容,后面会重点讨论. 在内存中配置默认用户 这样 ...
- SpringBootSecurity学习(06)网页版登录方法级别的权限
用户授权 前面讨论过,Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.前面介绍了登录,下面简单 ...
- SpringBootSecurity学习(09)网页版登录配置Session共享
场景 当后台项目由部署在一台改为部署在多台以后,解决session共享问题最常用的办法就是把session存储在redis等缓存中.关于session和cookie概念这里就不再赘述了,在spring ...
随机推荐
- js 截屏保存图片
html2canvas.js 这个js有个强大的功能,就是能将html 对应的dom生成canvas. 这样,我们就可以通过生成的canvas转化成 base64 图片,从而实现截屏功能: 核心代码如 ...
- python2和python3的解释器安装
python环境及安装 主板:人的骨架 用于扩展设备 CPU:人的大脑 用于计算和逻辑处理 硬板:肚子 存储数据(永久存储) C盘···· 内存:存储数据(临时储存) 没有保存会消失 电源:人的心脏 ...
- Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)
Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...
- 12_goto语句的使用
1.goto是一个关键字,其作用是运行到goto语句进行跳转,立即执行goto后面所对应标签的语句2.结构:goto 标签名(任意起)3.goto语句尽量不要跨函数使用,否则会使代码看起来非常乱,可读 ...
- 通过Web安全工具Burp suite找出网站中的XSS漏洞实战(二)
一.背景 笔者6月份在慕课网录制视频教程XSS跨站漏洞 加强Web安全,里面需要讲到很多实战案例,在漏洞挖掘案例中分为了手工挖掘.工具挖掘.代码审计三部分内容,手工挖掘篇参考地址为快速找出网站中可能存 ...
- python 冷知识(装13 指南)
python 冷知识(装13 指南) list1 += list2 和 list1 = list1 + list2 的区别 alpha = [1, 2, 3] beta = alpha # alpha ...
- HashMap原理。图文并茂式解读。这些注意点你一定还不了解
目录 概述 属性详解 table entrySet size modCount threshold.loadFactor 源码知识点必备 getGenericInterfaces和getInterfa ...
- ssh延迟加载问题的解决方案
1. 什么是延迟加载问题 ? 业务层查询的数据 关闭session 之后...web层获取延迟加载的数据失败. 例如:查询订单没有查询客户,需要显示客户,session已经关闭,无法查询 2. 如何解 ...
- Linux中安装PostgreSQL-10.1
环境说明 Linux版本:CentOS Linux release 7.6.1810 (Core) PostgreSQL版本:PostgreSQL-10.1 PostgreSQL下载网址:https: ...
- 使用element-ui中table expand展开行控制显示隐藏
问题讲解:在使用vue版本的ElementUI中的table功能的时候还是遇到了一些问题,可以说饿了么团队在这个UI框架的文档撰写已经非常不错了,不过还是有一些方法乍一看让人摸不着头脑,有些table ...