Springboot + Spring Security 实现前后端分离登录认证及权限控制

Springboot + Spring Security 实现前后端分离登录认证及权限控制

前言
本文主要的功能
文章目录
文章正文
一、准备工作
1、统一错误码枚举
2、统一json返回体
3、返回体构造工具
4、pom
5、配置文件
二、数据库表设计
建表语句
初始化表数据语句
三、Spring Security核心配置:WebSecurityConfig
四、用户登录认证逻辑:UserDetailsService
1、创建自定义UserDetailsService
2、准备service和dao层方法
(1)根据用户名查询用户信息
(2)根据用户名查询用户的权限信息
五、用户密码加密
六、屏蔽Spring Security默认重定向登录页面以实现前后端分离功能
1、实现登录成功/失败、登出处理逻辑
(1)登录成功
(2)登录失败
(3)登出
2、在WebSecurityConfig中的configure(HttpSecurity http)方法中声明
八、会话管理(登录过时、限制单用户或多用户登录等)
1、限制登录用户数量
2、处理账号被挤下线处理逻辑
3、在WebSecurityConfig中声明
九、实现基于JDBC的动态权限控制
1、权限拦截器
2、安全元数据源FilterInvocationSecurityMetadataSource
3、访问决策管理器AccessDecisionManager
4、在WebSecurityConfig中声明
十、最终的WebSecurityConfig配置
十一、结束语

原文中数据库更正如下:

 1 DROP TABLE IF EXISTS `sys_user`;
 2 create table sys_user
 3 (
 4     id                      int auto_increment
 5         primary key, 6     account                 varchar(32)          not null comment '账号',1)"> 7     user_name               varchar(用户名 8     password                varchar(64)          用户密码 9     last_login_time         datetime             上一次登录时间10     enabled                 tinyint(1) default 1 账号是否可用。默认为1(可用)11     account_non_expired             tinyint(是否过期。默认为1(没有过期)12     account_non_locked      tinyint(账号是否锁定。默认为1(没有锁定)13     credentials_non_expired tinyint(证书(密码)是否过期。默认为1(没有过期)14     create_time             datetime             创建时间15     update_time             datetime             修改时间16     create_user             int                  创建人17     update_user             修改人'
18 )
19     comment 用户表;
20 DROP TABLE IF EXISTS `sys_role`;
21 create table sys_role
22 23     id               int auto_increment comment 主键id24 25     role_code             varchar(32) 管理code26     role_name        varchar(角色名27     role_description varchar(64) 角色说明28 29     comment 用户角色表30 DROP TABLE IF EXISTS `sys_permission`;
31 create table sys_permission
32 33     id              34 35     permission_code varchar(权限code36     permission_name varchar(权限名37 38     comment 权限表39 create table sys_role_permission_relation
40 41     id            42 43     role_id       int 角色id44     permission_id 权限id45 46  comment 角色-权限关联关系表47 
48 create table sys_user_role_relation
49 50     id      51 52     user_id 用户id53     role_id 54 55     comment 用户角色关联关系表56 create table sys_request_path
57 58     id          59 60     url         varchar(64)  not 请求路径61     description varchar(128) 路径描述62 63     comment 64 create table sys_request_path_permission_relation
65 66     id            67     url_id        请求路径id68     permission_id 69 70     comment 路径权限关联表71 -- 用户
72 INSERT INTO sys_user (id,account,user_name,password,last_login_time,enabled,account_non_expired,account_non_locked,credentials_non_expired,create_time,update_time,create_user,update_user) VALUES (1,user1',1)">用户1$2a$10$47lsFAUlWixWG17Ca3M/r.EPJVIb7Tv26ZaxhzqN65nXVcAhHQM4i2019-09-04 20:25:362019-08-29 06:28:361);
73 INSERT INTO sys_user (id,1)">2,1)">user2用户2$2a$10$uSLAeON6HWrPbPCtyqPRj.hvZfeM.tiVDZm24/gRqm4opVze1cVvC2019-09-05 00:07:122019-08-29 06:29:24274 -- 角色
75 INSERT INTO sys_role (id,role_code,role_name,role_description) VALUES (admin管理员管理员,拥有所有权限76 INSERT INTO sys_role (id,1)">user普通用户普通用户,拥有部分权限77 -- 权限
78 INSERT INTO sys_permission (id,permission_code,permission_name) VALUES (create_user创建用户79 INSERT INTO sys_permission (id,1)">query_user查看用户80 INSERT INTO sys_permission (id,1)">3,1)">delete_user删除用户81 INSERT INTO sys_permission (id,1)">4,1)">modify_user修改用户82 -- 请求路径
83 INSERT INTO sys_request_path (id,url,description) VALUES (/getUser查询用户84 -- 用户角色关联关系
85 INSERT INTO sys_user_role_relation (id,user_id,role_id) VALUES (86 INSERT INTO sys_user_role_relation (id,1)">87 -- 角色权限关联关系
88 INSERT INTO sys_role_permission_relation (id,role_id,permission_id) VALUES (89 INSERT INTO sys_role_permission_relation (id,1)">90 INSERT INTO sys_role_permission_relation (id,1)">391 INSERT INTO sys_role_permission_relation (id,1)">492 INSERT INTO sys_role_permission_relation (id,1)">5,1)">93 INSERT INTO sys_role_permission_relation (id,1)">6,1)">94 -- 请求路径权限关联关系
95 INSERT INTO sys_request_path_permission_relation (id,url_id,permission_id) VALUES (null,1)">2);

 



原文链接:https://blog.csdn.net/I_am_Hutengfei/article/details/100561564

原文地址:https://www.cnblogs.com/xiadongqing

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


今天小编给大家分享的是Springboot下使用Redis管道(pipeline)进行批量操作的介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起...
本篇文章和大家了解一下springBoot项目常用目录有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。springBoot项目常用目录springBoot项...
本篇文章和大家了解一下Springboot自带线程池怎么实现。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。一: ThreadPoolTaskExecuto1 ThreadP...
这篇文章主要介绍了SpringBoot读取yml文件有哪几种方式,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。Spring Boot读取yml文件的主要方式...
今天小编给大家分享的是SpringBoot配置Controller实现Web请求处理的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧...
本篇文章和大家了解一下SpringBoot实现PDF添加水印的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介PDF(Portable Document Form...
本篇文章和大家了解一下解决Springboot全局异常处理与AOP日志处理中@AfterThrowing失效问题的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有...
本篇文章和大家了解一下IDEA创建SpringBoot父子Module项目的实现方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录前言1. 软硬件环...
今天小编给大家分享的是springboot获取项目目录路径的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收...
本篇内容主要讲解“SpringBoot+Spring Security无法实现跨域如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面...
这篇文章主要介绍“vue怎么发送请求到springboot程序”,在日常操作中,相信很多人在vue怎么发送请求到springboot程序问题上存在疑惑,小编查阅了各式资料,整理...
本篇内容主要讲解“Springboot内置的工具类CollectionUtils如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家...
本文小编为大家详细介绍“SpringBoot上传文件大小受限如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot上传文件大小受限如何解决”文章能帮...
本文小编为大家详细介绍“springboot拦截器如何创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot拦截器如何创建”文章能帮助大家解决疑惑,下面...
本文小编为大家详细介绍“Hikari连接池使用SpringBoot配置JMX监控的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Hikari连接池使用SpringBoot配...
今天小编给大家分享一下SpringBoot如何使用Sa-Token实现权限认证的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大...
这篇文章主要介绍“SpringBoot如何集成SFTP客户端实现文件上传下载”,在日常操作中,相信很多人在SpringBoot如何集成SFTP客户端实现文件上传下...
本篇内容主要讲解“Springboot插件怎么开发”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Springboot插件怎
这篇文章主要介绍“Springboot怎么解决跨域请求问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇...
今天小编给大家分享一下如何在SpringBoot2中整合Filter的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...