使用WSO2 Enterprise Integrator储存代币的最佳方法

问题描述

我正在某些需要使用访问和刷新令牌的系统上工作。 现在,在我的流程中,我将令牌保存在注册表中,并在需要更新令牌时对其进行更新。但是有时,我会收到一个错误消息,因为我的一个进程试图检索一个令牌,但是此令牌刚刚被更改过(就像注册表中的锁一样)。

存储,更新和检索此类信息的最佳方法是什么?

我尝试使用将属性存储在Hashmap中的类介体,但WSO2始终创建我的自定义类的新实例,因此也创建了我的hashmap的新实例。

有什么主意吗?谢谢!

解决方法

存储令牌的通常做法是在注册表中。这在ESB服务器的连接器实现[1]中使用。您能详细说明这个问题吗? ESB服务器版本是什么?什么是错误堆栈跟踪?您是否使用了与[1]中类似的实现?

进一步回答有关类介体的问题,您可以在类介体中使用静态变量在创建的对象之间共享令牌。但是,静态变量又不是线程安全的。

[1] -https://github.com/wso2-extensions/esb-connector-gmail/blob/master/src/main/resources/config/getAccessTokenFromRefreshToken.xml

,

我正在使用注册表读取/存储数据,这是一个问题。.
当您使用属性中介程序(例如令牌)阅读时,默认情况下,他也会被缓存15秒。因此,在阅读之后,撤消新的,然后再存储-您仍然可以从财产调解员那里获得“旧”的。可以使用脚本中介器来绕过此操作,并使用代码存储注册表项,并将CachableDuration设置为0。

我在blog中描述了从注册表中存储的阅读内容,尤其要查看已知的缺点段落。