WSO2 ESB。以编程方式访问Secure Vault

时间:2018-08-09 10:07:32

标签: wso2 wso2esb

我正在用Java(org.apache.synapse.rest.Handler接口)实现REST API的处理程序。在某些情况下,我需要访问Secure Vault并获得价值。 我知道您可以通过expression="wso2:vault-lookup('YOUR.KEY.HERE')"来实现此目的,但是找不到在处理程序中执行此操作的api。我相信org.apache.synapse.MessageContext可以提供帮助,但不确定如何解决。

4 个答案:

答案 0 :(得分:1)

我相信您将无法直接从处理程序中获取安全保管库的值,因此,建议您恢复密码并将其放在属性中,并放入处理程序中以检索该属性。

<property name="passwordvault"
                   expression="wso2:vault-lookup('YOUR.KEY.HERE')"
                   scope="default"/>

并使用MessageContext获得如下属性:

context.getProperty("passwordvault");

答案 1 :(得分:1)

您可以在自定义处理程序中使用以下代码段。

 public String getSecretPassword(String alias, MessageContext messageContext){
     RegistrySecretRepository regRepo = new RegistrySecretRepository();
     regRepo.setSynCtx(messageContext);
     return regRepo.getSecret(alias); 
    }

对pom.xml的依赖性,需要根据您的产品版本来更改版本。

<dependency>
    <groupId>org.wso2.carbon</groupId>
    <artifactId>org.wso2.carbon.mediation.security</artifactId>
    <version>4.2.0</version>
</dependency

请参考-http://malantech.blogspot.com/2016/10/basic-authentication-handler-with.html

谢谢

答案 2 :(得分:0)

我会回答我自己的问题。

我创建了一个虚拟序列并将其放入注册表中

<sequence name="SecureVaultSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<property expression="wso2:vault-lookup('MY.PASS')" name="NAME"
        scope="default" type="STRING"
        xmlns:ns="http://org.apache.synapse/xsd" xmlns:ns3="http://org.apache.synapse/xsd"/>
</sequence>

然后在我的处理程序中,我像这样检索它:

messageContext.getConfiguration().getSequence("conf:Resources/sequences/SecureVaultSeq.xml").mediate(messageContext);
key = (String) messageContext.getProperty("NAME");

希望这会对某人有所帮助。

答案 3 :(得分:0)

这只是一个不可取的解决方法,我相信您也可以尝试下面的代码,因为我之前也使用过类似的方法并且有效

<property expression="wso2:vault-lookup('ei.training.userid')" name="UserID" scope="default" type="STRING"/>
            <log>
                <property expression="wso2:vault-lookup('ei.training.userid')" name="UID"/>
            </log>