Skip to content

权限验证拦截器 🔐 ​

功能介绍 💡 ​

TIP

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

核心功能 ​

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

详细配置说明 ⚙️ ​

核心参数说明 ​

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

权限配置详解 (items) ​

基础配置 ​

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

Redis专用配置 ​

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

JWT专用配置 ​

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

登录控制配置 ​

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

用户相关配置 ​

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

权限控制配置 ​

参数名类型必填默认值说明
security-enabled-admin-authorityboolean否false是否启用管理员权限
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. 及时更新权限配置

相关文档 📚 ​