Java WSS4j 1.5:如何跳过密码验证?
我需要使用apache WSS4J 1.5进行一些SOAP签名/验证,但是我在跳过/禁用UsernameToken密码验证时遇到了问题 在WSS4J 1.6+中,我可以将安全引擎配置为使用NoOpValidator()类跳过用户名令牌身份验证,但1.5不支持这种功能Java WSS4j 1.5:如何跳过密码验证?,java,security,soap,signing,wss4j,Java,Security,Soap,Signing,Wss4j,我需要使用apache WSS4J 1.5进行一些SOAP签名/验证,但是我在跳过/禁用UsernameToken密码验证时遇到了问题 在WSS4J 1.6+中,我可以将安全引擎配置为使用NoOpValidator()类跳过用户名令牌身份验证,但1.5不支持这种功能 有没有办法告诉WSS4J 1.5完全跳过用户名/密码验证路由?您需要编写自己的回调处理程序实现来跳过加载LoginContext。然后可以从系统属性加载该处理程序类 参考javax.security.auth.callback.Ca
有没有办法告诉WSS4J 1.5完全跳过用户名/密码验证路由?您需要编写自己的回调处理程序实现来跳过加载
LoginContext
。然后可以从系统属性加载该处理程序类
参考javax.security.auth.callback.CallbackHandler的源代码
可以在中指定默认的CallbackHandler类实现
auth.login.defaultCallbackHandler安全属性
可以在Java安全属性文件中设置安全属性
位于名为/lib/security/java.security的文件中。
指java.home系统属性的值,以及
指定安装JRE的目录
如果安全属性设置为
CallbackHandler实现类,然后将加载LoginContext
指定的CallbackHandler并将其传递给基础
登录模块
LoginContext仅在未提供默认处理程序时加载该处理程序
一个。所有默认处理程序实现都必须提供公共
零参数构造函数
还应注意在更深入地研究WSSecEngine类之后,我发现我需要的不是CallBackHandler,而是一个跳过UsernameToken对象处理的自定义处理器:
WSSecurityEngine secEngine = new WSSecurityEngine();
WSSConfig wsConfig = WSSConfig.newInstance();
wsConfig.setProcessor(UsernameToken.TOKEN, new Processor() {
@Override
public void handleToken(Element arg0, Crypto arg1, Crypto arg2, CallbackHandler arg3, WSDocInfo arg4, Vector arg5, WSSConfig arg6)
throws WSSecurityException {
// skip the token processing
logger.debug("Skipping processing of the username token");
}
@Override
public String getId() {
return null;
}
});
secEngine.setWssConfig(wsConfig);
虽然WSS4J 1.5非常古老,但希望它能在将来为其他人带来希望
WSS4J 1.6+已经改变了这些处理器使用验证器的方式。我仍然有点困惑如何注册回调处理程序。我查看了
UsernameTokenProcessor
的源代码,但是当它查看这里的回调处理程序时,它已经在比较返回的密码了。我需要阻止WSS4J甚至尝试处理UsernameToken,但我不完全确定回调处理程序应该是什么或者应该如何注册。您知道这方面是否有文档/示例?我意识到WSS4J 1.5已经很老了,我能找到的所有文档都是针对WSS4J 2+的。好吧,所以我在代码中再翻了一番,发现我需要的不是回调处理器,而是定制处理器。