Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java WSS4j 1.5:如何跳过密码验证?_Java_Security_Soap_Signing_Wss4j - Fatal编程技术网

Java WSS4j 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

我需要使用apache WSS4J 1.5进行一些SOAP签名/验证,但是我在跳过/禁用UsernameToken密码验证时遇到了问题

在WSS4J 1.6+中,我可以将安全引擎配置为使用NoOpValidator()类跳过用户名令牌身份验证,但1.5不支持这种功能


有没有办法告诉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+的。好吧,所以我在代码中再翻了一番,发现我需要的不是回调处理器,而是定制处理器。