Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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中正确解码SAML请求(HTTP重定向)?_Java_Saml_Http Redirect_Inflate - Fatal编程技术网

如何在Java中正确解码SAML请求(HTTP重定向)?

如何在Java中正确解码SAML请求(HTTP重定向)?,java,saml,http-redirect,inflate,Java,Saml,Http Redirect,Inflate,我正在使用HTTP重定向绑定处理SAML请求。 我在另一篇文章中读到,为了在URL中检索SAML请求SAMLRequest参数的原始内容,需要执行以下步骤: URL解码 Base64解码 夸大内容 尽管这些步骤对我来说非常清楚,但我无法获得XML格式的SAML请求。我相信错误在第三步,也许有不止一种方法可以膨胀字节?这是执行上述三个函数的Java函数,给定的参数是URL中SAML参数的值 private String decodeMessage(String SAMLContent) {

我正在使用HTTP重定向绑定处理SAML请求。 我在另一篇文章中读到,为了在URL中检索SAML请求SAMLRequest参数的原始内容,需要执行以下步骤:

URL解码 Base64解码 夸大内容 尽管这些步骤对我来说非常清楚,但我无法获得XML格式的SAML请求。我相信错误在第三步,也许有不止一种方法可以膨胀字节?这是执行上述三个函数的Java函数,给定的参数是URL中SAML参数的值

private String decodeMessage(String SAMLContent) {
        try {
            //URLDecode, Base64 and inflate data

            //URLDecode
            SAMLContent = URLDecoder.decode(SAMLContent, "UTF-8");

            //Base64 decoding
            SAMLContent = new String(Base64.getDecoder().decode(SAMLContent), "UTF-8");

            //Inflating data
            try {
                byte[] compressed = new byte[10 * SAMLContent.getBytes().length];
                Inflater i = new Inflater(true);
                i.setInput(SAMLContent.getBytes(), 0, SAMLContent.getBytes().length);
                int finalSize = i.inflate(compressed);
                //Exception is thrown here
                SAMLContent = new String(SAMLContent.getBytes(), 0, finalSize, "UTF-8");
                i.end();


            } catch (DataFormatException ex) {
                JOptionPane.showMessageDialog(null, "DFE: " + ex.getMessage());
            }

        } catch (UnsupportedEncodingException ex) {
            JOptionPane.showMessageDialog(null, "UEE: " + ex.getMessage());
        }

        return SAMLContent;

    }
如果复制并粘贴第一步的输出,我可以在页面底部看到格式良好的XML,因此至少URL解码工作正常。
如果您有任何解决方案,请告诉我,谢谢。

我就是这样做的。流程是检测请求是否为HTTP重定向,base64解码请求,然后将其膨胀。以下链接指向在github中完成所有这些操作的代码

如果你得到

标题检查不正确

检查这个

您可能需要将充气代码更改为:

return new String(inflatedData, 0, inflatedBytesLength, "UTF-8");

我就是这样做的。流程是检测请求是否为HTTP重定向,base64解码请求,然后将其膨胀。以下链接指向在github中完成所有这些操作的代码

如果你得到

标题检查不正确

检查这个

您可能需要将充气代码更改为:

return new String(inflatedData, 0, inflatedBytesLength, "UTF-8");

嗨,我检查了你提供的链接,尤其是最后一个。但是,膨胀代码返回的标题检查不正确。我更新了代码以显示当前版本,你知道吗?感谢you@Stefano我添加了一个关于充气时编码的注释。您可能需要添加它。谢谢,但我无法解决此问题。我已经在每次使用newstring语句时指定了UTF-8,并且已经声明了offset和size参数。我真的没有线索,也找不到任何东西,所以如果你有其他的建议,请让我知道。再次感谢你的帮助now@Stefano你可以看看这个,以防是包装。代码假定为true。您可以尝试false,而不是传入的useWrap值。i、 e.充气减压器=新充气器错误;我来看看。你能确认我至少遵循了正确的程序吗?在复制URL中SAMLRequest参数的值后,我必须对其进行URL解码,base64解码,然后对其进行膨胀?嗨,我检查了您提供的链接,尤其是最后一个链接。但是,膨胀代码返回的标题检查不正确。我更新了代码以显示当前版本,你知道吗?感谢you@Stefano我添加了一个关于充气时编码的注释。您可能需要添加它。谢谢,但我无法解决此问题。我已经在每次使用newstring语句时指定了UTF-8,并且已经声明了offset和size参数。我真的没有线索,也找不到任何东西,所以如果你有其他的建议,请让我知道。再次感谢你的帮助now@Stefano你可以看看这个,以防是包装。代码假定为true。您可以尝试false,而不是传入的useWrap值。i、 e.充气减压器=新充气器错误;我来看看。你能确认我至少遵循了正确的程序吗?在复制URL中SAMLRequest参数的值之后,我必须对其进行URL解码,base64解码,然后对其进行膨胀?