我正在研究最近升级到AEM 6.3的遗留项目。它使用共享cookie在AEM实例之间对用户进行身份验证。它专门使用TokenUtil
通过createCredentials
方法创建凭据。但是,我有这个要求,我应该使用服务用户登录而不是通常的loginAdministrative
。
我在创建令牌之前尝试先验证存储库。
this.repositorySession = this.repository.loginService("myAuthenticatorService", "");
authInfo = TokenUtil.createCredentials(request, response, this.repository, uid, true);
显然,createCredentials
会调用loginAdministrative
,这是不受欢迎的。因此,即使我对服务用户SlingRepository
进行身份验证,它也会继续投掷RepositoryException
。
// <editor-fold defaultstate="collapsed" desc="Compiled Code">
/* 0: aconst_null
* 1: astore 5
* 3: aconst_null
* 4: astore 6
* 6: aload_2
* 7: aconst_null
* 8: invokeinterface org/apache/sling/jcr/api/SlingRepository.loginAdministrative:(Ljava/lang/String;)Ljavax/jcr/Session;
* 13: astore 5
* 15: new org/apache/sling/auth/core/spi/AuthenticationInfo
* 18: dup
* 19: ldc TOKEN
* 21: aload_3
* 22: invokespecial org/apache/sling/auth/core/spi/AuthenticationInfo."<init>":(Ljava/lang/String;Ljava/lang/String;)V
....
以上是Netbeans检查编译代码的摘录。
我的问题是,有没有其他方法可以在不依赖loginAdministrative
的情况下为给定的用户ID正确创建令牌?在我尝试通过查看原始实现来实现我自己的TokenUtil
之前..
PS。我可以将我的软件包添加到 Apache Sling登录管理白名单配置片段,但我认为这不会在长期内存活下来。
修改
我似乎无法实现我自己的TokenUtil作为一种解决方法。 Adobe没有公开版本2.5.30的com.day.crx.sling.crx-auth-token
包。仅在Maven资源库2.4.30公开发布。我应该联系日间护理团队寻求帮助。方法TokenAuthenticationHandler.getRepositoryId(bool)
仅适用于AEM 6.3使用的2.5.30。