原创 fjh 有范编程笔记 2023-02-10 20:33 发表于北京
收录于合集#Spring Security Easy Starter3个
1、V0.0.1 介绍
Spring Security Easy Starter V0.0.1版本一键导入即可梭哈,开启认证授权。目前实现基本常用使用的图片验证+用户名密码登录。
-
简单易用,引入依赖就可以用。
-
对外无依赖,redis 可选、mysql 可选。
-
sql配置实现登录和鉴权的自定义,登录信息字段自定义。
-
实现回调接口进行扩展。
2、仓库地址
仓库地址:https://gitee.com/fjh2017/spring-security-easy-starter.git
3、使用文档
使用文档:https://gitee.com/fjh2017/spring-security-easy-starter
-
3.1、安装教程
-
3.1.1、maven 依赖
<dependency>
<groupId>io.github.fjh2021</groupId>
<artifactId>spring-security-easy-starter</artifactId>
<version>0.0.1</version>
</dependency>
-
3.1.2、配置文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: root21.
redis:
host: localhost
port: 6379
securityEasy:
session:
store-type: REDIS # REDIS,NONE
time-out: 600
kaptcha:
time-out: 600
auth:
usernameQuerySql:
authoritiesByIdQuerySql:
配置说明
参数名称 | 参数说明 |
securityEasy.session.store-type | NONE, REDIS,JDBC,默认NONE |
securityEasy.session.time-out | 默认:600s |
securityEasy.kaptcha.time-out | 有效时间,默认600s |
securityEasy.auth.usernameQuerySql | 查找用户登录字段有默认值 |
securityEasy.auth.authoritiesByIdQuerySql | 查找用户权限有默认值 |
-
3.1.3、执行初始化sql (可选) 使用默认用户表和权限表#默认密码123
CREATE TABLE `users`(
`id` bigint,
`username` varchar(50) NOT NULL COMMENT"用户名",
`password` varchar(500) NOT NULL COMMENT"密码",
`enabled` tinyint(1) NOT NULL COMMENT"是否启用",
`non_locked` int DEFAULT NULL COMMENT"锁定状态",
`nick_name` varchar(100) DEFAULT NULL COMMENT"真实名称",
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT"用户表";
CREATE TABLE `authorities`(
`id` bigint,
`authority` varchar(100) DEFAULT NULL COMMENT"权限",
`user_id` varchar(100) DEFAULT NULL COMMENT"用户id",
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT"权限表";
#默认密码123
INSERT INTO test.users(username, password, enabled, id, non_locked, nick_name)
VALUES('admin', '{bcrypt}$2a$10$yfc6b1M.ZfVLgpLAU1kbSe9MF.xM57uPtdyZyW3kmVjopmkL.EO5C', 1, 1, 1, '管理员');
INSERT INTO test.authorities (authority, user_id, id)
VALUES ('getCurrentUser', '1', 1);
-
3.2 使用说明
-
3.2.1、获取验证码
接口地址:/captchaImage请求方式:GET响应参数:
参数名称 | 参数说明 | 类型 |
captchaKey | 验证码key | String |
expire | 验证码有效时间(秒) | long |
base64Img | 图片验证码base64 | string |
响应示例:
{
"captchaKey": "ed407923-222b-4e76-baeb-2f2373934b2f",
"expire": 600,
"base64Img": "base64"
}
-
3.2.2、用户登录
接口地址:/login
请求方式: post
请求参数:
参数名称 | 参数说明 |
username | 用户名 |
password | 密码 |
captchaKey | 验证码key |
captchaValue | 验证码值 |
响应参数:
参数名称 | 参数说明 |
code | 响应码, 0:成功,1:账号不存在,2:密码错误 |
msg | 提示信息 |
token | 登录token |
响应示例:
{
"code": 0,
"msg": "成功",
"token": "ed407923-222b-4e76-baeb-2f2373934b2f"
}
-
3.3 Api 操作
-
3.3.1、获取当前登录人信息
CustomUser customUser=HttpSessionUtil.getUser();
参数名称 | 参数说明 |
id | 用户id |
username | 用户名称 |
authorities | 权限 |
extParam | 扩展字段Map |
-
3.3.2、获取扩展字段
比如:获取nick_name
String nickName=HttpSessionUtil.getUser().getExtParamByName("nick_name");
-
3.3.3、如何加入扩展字段
直接在securityEasy.auth.usernameQuerySql 的select加入你的字段
-
3.3.4、接口权限拦截@EasyPermission
public class TestController {
@GetMapping("getCurrentUser")
@EasyPermission
public UserDetails getCurrentUser() {
return HttpSessionUtil.getUser();
}
}
参考项目spring-security-esay-sample 项目
-
3.4 扩展功能
1、实现EasyUserDetailsService接口自定登录
2、实现EasyAuthFailureService接口登录失败回调
3、实现EasyAuthSuccessService接口登录成功回调
4、实现EasyAuthEntryPointService接口没有登录回调
5、实现EasyAccessDeniedService接口没有接口权限回调