0

我有一个零售系统,其中中心节点是 corp-0,商店节点是 store-1、store-2 等。我正在使用 SymmetricDS 3.5.13 在商店节点和公司节点之间进行同步。即使在使用我的业务逻辑成功注册后,我也必须对尝试连接 corp 节点的每个商店节点进行身份验证。使用实现 INodePasswordFilter 的类,如何检索请求存储的连接的 external-id ? 感谢您对 SymmetricDS 密码呈现和保存的配置和工作流程的任何帮助。我尝试的类实现如下所示。

public class AuthenticationClinic implements INodePasswordFilter,IParameterFilter, INodeGroupExtensionPoint{
@Override
public String onNodeSecurityRender(String password) {

    // I have to get the NodeGroupId and ExternalId of the
            // requesting node here
            // String external_id= *Method to retrieve External Id of Requesting Node*
            // if(checking.checknodeauthenticity(external_id)) return password;
            // else return "dummy";

    return "dummy";
}

@Override
public String onNodeSecuritySave(String password) {

    return password;
}

@Override
public String[] getNodeGroupIdsToApplyTo() {
    return new String[] { "store" };
}

@Override
public String filterParameter(String key, String value) {
    return value;
}

 public boolean isAutoRegister() {
        return false;
 }
4

1 回答 1

1

声明你的过滤器来实现ISymmetricEngineAware,声明一个字段engine和一个方法

@Override
public void setSymmetricEngine(ISymmetricEngine engine) {
  this.engine = engine;
}

然后使用该字段engine获取 sql 模板:

ISqlTemplate sqlTemplate = engine.getSymmetricDialect().
   getPlatform().getSqlTemplate();




利用

ISqlTemplate sqlTemplate = AbstractSymmetricEngine.
  findEngineByName("my.symmetric.ds.engine").
  getSymmetricDialect().getPlatform().getSqlTemplate();

使用来自NodeService的模板之一查询数据库。

于 2014-02-26T09:32:59.050 回答