You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ignite 2.14迁移至2.17:SecurityContext实现适配问题求助

Ignite 2.14 → 2.17 安全模块迁移指南(针对PR#11174改动)

一、SecurityContext 权限校验方法迁移

PR#11174移除了SecurityContext中的xxxOperationAllowed系列方法,权限校验逻辑统一迁移到IgnitePermissionChecker接口处理,具体操作如下:

替换步骤

  1. 获取IgnitePermissionChecker实例
    通过IgniteSecurity对象获取,示例:

    IgniteSecurity security = ignite.security();
    IgnitePermissionChecker permissionChecker = security.permissionChecker();
    // 如果需要基于特定SecurityContext校验,传入上下文
    IgnitePermissionChecker permissionChecker = security.permissionChecker(securityContext);
    
  2. 替换原有校验逻辑
    原来的权限判断方法,替换为checkPermission调用,传入对应权限类型的实例,同时捕获SecurityException处理无权限场景。

代码对比

2.14版本原代码:

public void verifyCacheWriteAccess(SecurityContext secCtx, String cacheName) {
    if (!secCtx.cacheOperationAllowed(cacheName, CacheOperation.WRITE)) {
        throw new SecurityException("无缓存写入权限: " + cacheName);
    }
}

2.17版本迁移后代码:

public void verifyCacheWriteAccess(IgniteSecurity security, String cacheName) {
    IgnitePermissionChecker checker = security.permissionChecker();
    try {
        // 使用CachePermission和CacheAction替代原有枚举
        checker.checkPermission(new CachePermission(cacheName, CacheAction.WRITE));
    } catch (SecurityException e) {
        throw new SecurityException("无缓存写入权限: " + cacheName, e);
    }
}

对应关系说明

原有不同类型的xxxOperationAllowed方法,对应以下权限类:

  • 缓存权限:CachePermission + CacheAction枚举
  • 集群权限:ClusterPermission + ClusterAction枚举
  • 任务权限:TaskPermission + TaskAction枚举
  • 服务权限:ServicePermission + ServiceAction枚举

二、GridSecurityProcessor 适配为 IgniteSecurity

原GridSecurityProcessor被IgniteSecurity接口替代,需调整实例获取和方法调用逻辑:

替换步骤

  1. 获取IgniteSecurity实例
    直接从Ignite实例中获取,替代原来从context中取GridSecurityProcessor的方式:

    // 2.14旧方式
    GridSecurityProcessor secProcessor = ignite.context().security();
    
    // 2.17新方式
    IgniteSecurity security = ignite.security();
    
  2. 替换核心方法调用
    原有认证、上下文获取等方法直接映射到IgniteSecurity的对应方法,授权逻辑则通过IgnitePermissionChecker处理。

代码对比

2.14版本原代码:

GridSecurityProcessor secProcessor = ignite.context().security();
// 认证获取SecurityContext
SecurityContext secCtx = secProcessor.authenticate(new UsernamePasswordCredentials("user", "pass"));
// 授权校验
secProcessor.authorize(secCtx, GridSecurityOperation.CACHE_PUT);

2.17版本迁移后代码:

IgniteSecurity security = ignite.security();
// 认证获取SecurityContext
SecurityContext secCtx = security.authenticate(new UsernamePasswordCredentials("user", "pass"));
// 授权校验通过PermissionChecker实现
IgnitePermissionChecker checker = security.permissionChecker(secCtx);
checker.checkPermission(new CachePermission("myCache", CacheAction.PUT));

自定义安全实现注意点

如果之前自定义了GridSecurityProcessor实现,现在需要:

  • 改为实现IgniteSecurity接口,或者通过SecurityProvider接口提供自定义实现
  • 权限校验逻辑统一放在IgnitePermissionChecker的实现中,SecurityContext仅作为身份信息载体

内容的提问来源于stack exchange,提问作者user1396576

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:36:10