[工具] Ice注册中心账号密码

Ice是个好东西,希望国内能普及

        我们在搭建Ice 注册中心后,使用图形工具 【IceGrid Admin】 或者命令行工具【icegridadmin】登录时,默认情况下,都是不需要账号密码,直接登录,这在线上运营时是无法接受的。

下面是原始配置(参数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组件使用的是默认组件,组件内部没有判断逻辑,需要自己实现,所以就没有账号密码功能。只会在操作的配置时,留下必要的痕迹。



我们看下代码是如何实现


邪恶的分割线

==================================================================

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函数本身并未执行任何操作。在这样的配置下,需要使用自己开发的组件替换NullPermissionsVerifier,才能实现限制账号密码登录。


下一篇文章将介绍如何使用 AdminCryptPasswords 配置,实现Ice注册中心的账号密码登录。



如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

你可能感兴趣的:([工具] Ice注册中心账号密码)