Ignite 2.14迁移至2.17:SecurityContext实现适配问题求助
Ignite 2.14 → 2.17 安全模块迁移指南(针对PR#11174改动)
一、SecurityContext 权限校验方法迁移
PR#11174移除了SecurityContext中的xxxOperationAllowed系列方法,权限校验逻辑统一迁移到IgnitePermissionChecker接口处理,具体操作如下:
替换步骤
获取IgnitePermissionChecker实例
通过IgniteSecurity对象获取,示例:IgniteSecurity security = ignite.security(); IgnitePermissionChecker permissionChecker = security.permissionChecker(); // 如果需要基于特定SecurityContext校验,传入上下文 IgnitePermissionChecker permissionChecker = security.permissionChecker(securityContext);替换原有校验逻辑
原来的权限判断方法,替换为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接口替代,需调整实例获取和方法调用逻辑:
替换步骤
获取IgniteSecurity实例
直接从Ignite实例中获取,替代原来从context中取GridSecurityProcessor的方式:// 2.14旧方式 GridSecurityProcessor secProcessor = ignite.context().security(); // 2.17新方式 IgniteSecurity security = ignite.security();替换核心方法调用
原有认证、上下文获取等方法直接映射到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
相关产品推荐
相关产品推荐

