Skip to content

权限验证拦截器 🔐

功能介绍 💡

TIP

权限验证拦截器就像一个智能门禁系统,负责管理用户的会话(Session)和权限验证。支持Redis和JWT两种验证方式,可以灵活应对不同的应用场景。

核心功能

  • ✅ 会话管理(Redis/JWT)
  • ✅ 权限验证
  • ✅ 多系统支持
  • ✅ 登录限制控制

详细配置说明 ⚙️

核心参数说明

参数名类型必填默认值说明
enabledbooleanfalse是否启用拦截器
itemsarray-权限配置列表

权限配置详解 (items)

基础配置

参数名类型必填默认值说明
typestring-存储类型:redis/jwt
urlsarray-需要拦截的URL列表
authorization-namestringauthorization令牌参数名
business-keystringbearer业务标识(多系统区分用)
expirestring-过期时间(如:PT30M)

Redis专用配置

参数名类型必填默认值说明
redis-auto-expirebooleantrue是否自动延期

JWT专用配置

参数名类型必填默认值说明
jwt-secretstring-JWT密钥
is-cryptobooleanfalse是否启用加密
crypto-keystring-数据加密密钥
jwt-check-logoutbooleanfalse是否验证退出状态

登录控制配置

参数名类型必填默认值说明
login-restriction-typestringNO登录限制类型;NO 无限制,FORCED 强制登录,REFUSE 拒绝登录
is-generate-temp-codebooleanfalse是否生成临时码

用户相关配置

参数名类型必填默认值说明
user-login-urlsarray-登录接口地址
user-logout-urlsarray-退出接口地址
user-update-urlsarray-更新用户信息接口
user-get-info-urlsarray-获取用户信息接口
user-get-session-urlsarray-获取会话信息接口

权限控制配置

参数名类型必填默认值说明
security-enabled-admin-authoritybooleanfalse是否启用管理员权限
security-visitor-urlsarray-游客可访问地址
security-login-urlsarray-登录后可访问地址
security-forbid-urlsarray-禁止访问地址

配置示例 📋

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

最佳实践 💡

  1. 存储方式选择

    • Redis:适合需要频繁更新的场景
    • JWT:适合分布式系统,无状态管理
  2. 安全建议

    • 使用HTTPS传输
    • 设置合理的过期时间
    • 定期更换密钥
  3. 性能优化

    • 合理设置缓存策略
    • 避免频繁的权限检查
    • 优化会话存储结构

常见问题 ❓

  1. 会话失效

    • 检查过期时间设置
    • 验证续期配置
    • 确认存储服务状态
  2. 权限验证失败

    • 检查权限配置
    • 验证令牌格式
    • 确认用户权限列表

安全提示 ⚠️

CAUTION

  1. 妥善保管JWT密钥和加密密钥
  2. 定期清理过期会话
  3. 监控异常登录行为
  4. 及时更新权限配置

相关文档 📚