我需要使用ApacheSOAP1.5进行一些SOAP签名/验证,但是我在跳过/禁用WSS4J密码验证时遇到了困难。
在WSS4J 1.6+中,我可以将安全引擎配置为使用NoOpValidator()类来跳过用户名令牌身份验证,但是1.5没有这种支持。
有没有办法告诉WSS4J 1.5跳过用户名/密码验证路由?
发布于 2016-03-22 03:43:01
在深入研究了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+改变了这些处理器与验证器的工作方式。
发布于 2016-03-21 22:08:59
您需要编写自己的回调处理程序实现,以跳过可以从系统属性加载处理程序类的加载LoginContext.Then。
参考javax.security.auth.callback.CallbackHandler,的源代码
可以在auth.login.defaultCallbackHandler安全属性中指定默认的CallbackHandler类实现。 安全属性可以在名为/lib/ security /java.security文件中的Java安全属性文件中设置。引用java.home系统属性的值,并指定安装JRE的目录。 如果安全属性设置为CallbackHandler实现类的完全限定名,则LoginContext将加载指定的CallbackHandler并将其传递给基础LoginModules。 只有在未提供默认处理程序的情况下,LoginContext才会加载它。所有默认的处理程序实现都必须提供公共的零参数构造函数。
还要注意WSS4J 1.5.XX带来的一些风险
https://stackoverflow.com/questions/36140824
复制相似问题