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 举报,一经查实,本站将立刻删除。