# tiny-security
**Repository Path**: leisureLXY/tiny-security
## Basic Information
- **Project Name**: tiny-security
- **Description**: 一个基于token验证的Java Web权限控制框架,支持redis、jdbc和单机session多种存储方式,前后端分离项目、不分离项目均可使用,功能完善、使用简单、文档清晰,易于扩展。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 1
- **Created**: 2023-01-10
- **Last Updated**: 2026-01-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 登录认证, 会话控制, Java, SpringBoot, Security
## README
tiny-security
# 1、简介
tiny-security 是一款基于 SpringBoot 开发的轻量级 Java Web 权限认证框架,致力于让认证鉴权变得简单高效。
核心特性
- 支持登录认证与权限认证双重保障
- 兼容 token 验证与 cookie 验证两种模式
- 提供多种会话存储方案:redis、jdbc 和单机 session(支持自定义会话存储)
- 无缝适配前后端分离与不分离项目
- 完善的文档,包括使用说明、API文档、最佳实践等
---
# 2、快速入门
## 2.1、SpringBoot集成
### 2.1.1 环境准备
- JDK 8 及以上版本
- SpringBoot 2.x 或 3.x 项目
### 2.1.2 引入依赖
根据 SpringBoot 版本选择对应的 starter:
**SpringBoot 2.x**
```xml
top.lxyccc
tiny-security-boot-starter
1.2.7
```
**SpringBoot 3.x**
```xml
top.lxyccc
tiny-security-boot3-starter
1.2.7
```
### 2.1.3 配置参数
```yaml
tiny-security:
# 存储类型,目前支持jdbc和redis和单机内存三种(redis,jdbc,single),如不配置,则默认为single
store-type: single
# token名称 (同时也是cookie名称以适配前后端不分离的模式)
token-name: token
# token有效期 (即会话时长),单位秒 默认1800秒(30分钟)
timeout: 1800
# 最大登录并发数,默认不限制
max-concurrent-logins: 2
# credentials凭证类型,可配置uuid(默认风格),snowflake(纯数字风格),objectid(变种uuid),random128 (随机128位字符串),nanoid,ulid
credentials-style: uuid
# 当配置为jdbc时,存储会话信息的表名字,默认为t_auth_storage
table-name: t_auth_storage
# 是否开启权限(角色)校验,默认false不开启,开启后需要实现AuthorizationInfoGet接口
authorization-enabled: true
# 权限校验方式,可配置ANNOTATION(注解方式)、URL(url方式)
perm-check-mode: ANNOTATION
# jwt密钥,不配置则使用默认值
jwt-secret: K$N)A3*sGGf 依赖于`jdbcTemplate`,须导入依赖 `spring-boot-starter-jdbc`,在yml里进行数据库连接的相应配置并导入框架提供的sql脚本(目前仅提供了MySQL版本)
```xml
org.springframework.boot
spring-boot-starter-jdbc
```
2. **使用redis做会话存储容器**
> 依赖于`stringRedisTemplate`,须导入依赖 `spring-boot-starter-data-redis` ,并在yml里进行redis连接的相应配置
```xml
org.springframework.boot
spring-boot-starter-data-redis
```
### 2.1.5 实现AuthorizationInfoGet接口
> 如需开启权限(角色)校验,还需要实现`AuthorizationInfoGet`接口,提供权限和角色编码数据(框架没有对权限和角色标记码进行缓存,如需缓存请自行处理)
```java
@Component
public class AuthorizationInfoGetImpl implements AuthorizationInfoGet {
private final static Logger logger = LoggerFactory.getLogger(PermissionInfoInterfaceImpl.class);
/**
* 返回一个账号所拥有的权限码集合
* @param subject 登录主体,包含loginId、登录凭证等信息
*/
@Override
public Set getPermissionSet(LoginSubject subject) {
if (logger.isInfoEnabled()) {
logger.info("AuthorizationInfoGet -- getPermissionSet -- subject = {}", subject);
}
// 自定义权限编码列表获取逻辑,下面的只是示例
Set permissionSet = new HashSet() {{
add("user:read");
add("user:write");
}};
return permissionSet;
}
/**
* 返回一个账号所拥有的角色标识集合 (权限与角色可分开校验)
* @param subject 登录主体,包含loginId、登录凭证等信息
*/
@Override
public Set getRoleSet(LoginSubject subject) {
if (logger.isInfoEnabled()) {
logger.info("AuthorizationInfoGet -- getRoleSet -- subject = {}", subject);
}
// 自定义角色编码列表获取逻辑,下面的只是示例
Set roleSet = new HashSet() {{
add("admin");
add("user");
}};
return roleSet;
}
}
```
---
## 2.2、会话认证
### 2.2.1 登录认证,创建会话
```java
@RestController
public class LoginController {
@Autowired
private AuthProvider authProvider;
@PostMapping("/login")
public Result