外观
权限验证拦截器 🔐
功能介绍 💡
TIP
权限验证拦截器就像一个智能门禁系统,负责管理用户的会话(Session)和权限验证。支持Redis和JWT两种验证方式,可以灵活应对不同的应用场景。
核心功能
- ✅ 会话管理(Redis/JWT)
- ✅ 权限验证
- ✅ 多系统支持
- ✅ 登录限制控制
详细配置说明 ⚙️
核心参数说明
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
enabled | boolean | 否 | false | 是否启用拦截器 |
items | array | 是 | - | 权限配置列表 |
权限配置详解 (items)
基础配置
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
type | string | 是 | - | 存储类型:redis/jwt |
urls | array | 是 | - | 需要拦截的URL列表 |
authorization-name | string | 否 | authorization | 令牌参数名 |
business-key | string | 否 | bearer | 业务标识(多系统区分用) |
expire | string | 否 | - | 过期时间(如:PT30M) |
Redis专用配置
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
redis-auto-expire | boolean | 否 | true | 是否自动延期 |
JWT专用配置
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
jwt-secret | string | 是 | - | JWT密钥 |
is-crypto | boolean | 否 | false | 是否启用加密 |
crypto-key | string | 否 | - | 数据加密密钥 |
jwt-check-logout | boolean | 否 | false | 是否验证退出状态 |
登录控制配置
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
login-restriction-type | string | 否 | NO | 登录限制类型;NO 无限制,FORCED 强制登录,REFUSE 拒绝登录 |
is-generate-temp-code | boolean | 否 | false | 是否生成临时码 |
用户相关配置
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
user-login-urls | array | 否 | - | 登录接口地址 |
user-logout-urls | array | 否 | - | 退出接口地址 |
user-update-urls | array | 否 | - | 更新用户信息接口 |
user-get-info-urls | array | 否 | - | 获取用户信息接口 |
user-get-session-urls | array | 否 | - | 获取会话信息接口 |
权限控制配置
参数名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
security-enabled-admin-authority | boolean | 否 | false | 是否启用管理员权限 |
security-visitor-urls | array | 否 | - | 游客可访问地址 |
security-login-urls | array | 否 | - | 登录后可访问地址 |
security-forbid-urls | array | 否 | - | 禁止访问地址 |
配置示例 📋
Redis存储配置
yaml
wueasy:
gateway:
filter:
session:
enabled: true
items:
- type: redis # 使用Redis存储
urls: # 拦截的URL
- /demo/**
business-key: demo # 业务标识
expire: PT1H # 1小时过期
redis-auto-expire: true # 自动续期
user-login-urls: # 登录接口
- /demo/login
user-logout-urls: # 退出接口
- /demo/logout
security-visitor-urls: # 游客权限
- /demo/captcha
- /demo/login
security-login-urls: # 登录权限
- /demo/getInfo
JWT存储配置
yaml
wueasy:
gateway:
filter:
session:
enabled: true
items:
- type: jwt
urls:
- /api/**
jwt-secret: "your-secret-key"
is-crypto: true
crypto-key: "your-crypto-key"
jwt-check-logout: true
登录接口开发 💻
返回对象要求
java
@PostMapping(value = "/login", produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<ResultVo<SessionVo>> login(@RequestBody @Valid LoginDto dto) {
return Mono.just(ResultVo.ok(loginService.login(dto)));
}
登录逻辑示例
java
@Override
public SessionVo login(LoginDto dto) {
// 1. 验证登录信息
if (!"admin".equals(dto.getAccountNo()) || !"123456".equals(dto.getPassword())) {
throw new InvokeException(-1, "用户名或密码不正确");
}
// 2. 创建会话信息
SessionVo session = new SessionVo();
session.setIsSystem(true); // 是否管理员
session.setUserId("1");
session.setNickname("wueasy");
// 3. 设置权限信息
Set<String> authorizeUrls = new HashSet<>();
authorizeUrls.add("/api/admin/**");
session.setAuthorizeUrlList(authorizeUrls);
return session;
}
令牌使用说明 🎫
请求示例
shell
# 使用curl发送请求
curl -X GET \
-H "authorization: your-token-here" \
http://127.0.0.1:8080/demo/getInfo
最佳实践 💡
存储方式选择
- Redis:适合需要频繁更新的场景
- JWT:适合分布式系统,无状态管理
安全建议
- 使用HTTPS传输
- 设置合理的过期时间
- 定期更换密钥
性能优化
- 合理设置缓存策略
- 避免频繁的权限检查
- 优化会话存储结构
常见问题 ❓
会话失效
- 检查过期时间设置
- 验证续期配置
- 确认存储服务状态
权限验证失败
- 检查权限配置
- 验证令牌格式
- 确认用户权限列表
安全提示 ⚠️
CAUTION
- 妥善保管JWT密钥和加密密钥
- 定期清理过期会话
- 监控异常登录行为
- 及时更新权限配置