Ice是個好東西死陆,希望國內(nèi)能普及
? ? ? ? 我們在搭建Ice 注冊中心后梅肤,使用圖形工具 【IceGrid Admin】 或者命令行工具【icegridadmin】登錄時,默認情況下,都是不需要賬號密碼呆瞻,直接登錄谷婆,這在線上運營時是無法接受的慨蛙。
下面是原始配置(參數(shù)Ice 官方demo:Documents\ZeroC\Ice-3.6.4-demos\cpp\IceGrid\customLocator)
IceGrid.Registry.AdminPermissionsVerifier=DemoIceGrid/NullPermissionsVerifier
IceGridAdmin.Username=foo
IceGridAdmin.Password=bar
雖然設置了賬號密碼,但是由于DemoIceGrid/NullPermissionsVerifier組件使用的是默認組件纪挎,組件內(nèi)部沒有判斷邏輯期贫,需要自己實現(xiàn),所以就沒有賬號密碼功能异袄。只會在操作的配置時通砍,留下必要的痕跡。
我們看下代碼是如何實現(xiàn)
邪惡的分割線
==================================================================
class GLACIER2_API PermissionsVerifier : virtual public ::Ice::Object
{
? ? virtual bool checkPermissions(const ::std::string&, const ::std::string&, ::std::string&, const ::Ice::Current& = ::Ice::Current()) const = 0;
};
class NullPermissionsVerifier : public Glacier2::PermissionsVerifier
{
public:
? ? bool checkPermissions(const string&, const string&, string&, const Current&) const
? ? {
? ? ? ? return true;
? ? }
};
SessionPrx
RegistryI::createSession(const string& user, const string& password, const Current& current)
{
? ? try
? ? {
? ? ? ? string reason;
? ? ? ? if(!_clientVerifier->checkPermissions(user, password, reason, current.ctx))
? ? ? ? {
? ? ? ? ? ? PermissionDeniedException exc;
? ? ? ? ? ? exc.reason = reason;
? ? ? ? ? ? throw exc;
? ? ? ? }
? ? }
}
class RegistryI : public Registry
{
? ? Glacier2::PermissionsVerifierPrx _clientVerifier;
};
==================================================================
可以看到烤蜕,checkPermissions函數(shù)本身并未執(zhí)行任何操作封孙。在這樣的配置下,需要使用自己開發(fā)的組件替換NullPermissionsVerifier讽营,才能實現(xiàn)限制賬號密碼登錄虎忌。
下一篇文章將介紹如何使用?AdminCryptPasswords 配置,實現(xiàn)Ice注冊中心的賬號密碼登錄斑匪。