我正在尝试在Axis2 InFlow执行期间实施动态策略加载。在Axis2流的“安全”阶段之前放置的附加模块之一负责确定需要应用的策略并根据需要加载它。以下是加载策略的处理程序中的几行。
...
RampartConfig rampartConfig = new RampartConfig();
...
rampartConfig.setPwCbClass("com.example.security.callback.UsernamePasswordCallbackHandler");
...
Policy policy = PolicyEngine.getPolicy(policyElement);
policy.addAssertion(rampartConfig);
messageContext.getOptions().setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy);
....
该政策如下所示。
<wsp:Policy wsu:Id="UsernameToken" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:ExactlyOne>
<wsp:All>
<sp:SupportingTokens
xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken=
"http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:HashPassword/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
</wsp:All>
</wsp:ExactlyOne>
启动后,策略成功加载并到达密码回调处理程序。但是,如果您尝试使用您放入请求的任何凭据再次完成请求 - 它将通过而不是返回错误。
这意味着对于secong和进一步的请求,rampart会忽略密码回调处理程序的一些方法。
我正在使用WSO2 ESB 4.8.0蚂蚁它很烦人,它不能按照纯Axis2 / Rampart文档工作。
如果有人可以提供帮助,那就太好了,因为我目前仍然遇到这个问题。
谢谢, 弗拉基米尔。