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