java - 授权 header 的 Grails Base64 解码在解码时格式错误

标签 java grails encoding groovy base64

我有一个 base64 解码授权 header 的 grails Controller 。我使用 CURL 从 PHP 脚本发送了这个。

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "testindia01@test.com:india123");

我的 grails 控制台日志显示:

Authorization raw: Basic dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=, isBase64: true
Authorization decoded: ´"q—ïÕ—•πë•Ñ¿≈—ïÕ–πçΩ¥È•πë•Ñƒ»Ã

在上述情况下,我使用的是 Commons Base64 类,但使用 Groovy 内置的 decodeBase64 会产生相同的结果。

传入的 Authorization raw 是正确的。如果我复制它并通过 PHP 的 ecode 推送它,那么它就会正确解码。

echo base64_decode('dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=');

如果我将字符串直接复制到 Controller 中,例如

def decode = new String(Base64.encodeBase64("dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM="))

然后这也正确解码。

通过请求获取header

def auth = request.getHeader("Authorization")

我测试它是一个有效的 base64 字符串

Base64.isBase64(auth)

只是解码失败了。我试过在解码器上更改编码。

def decoded = new String(auth.decodeBase64(), "UTF-8")

以及其他编码,如 ISO-8859-1 和 Windows-1252,但每次都会返回不同的格式错误的字符串。

我也尝试过在 CURL 请求上手动设置 Accept-Encoding。

我没有想法:(

最佳答案

这是因为“Basic”已作为 getHeader 返回值的一部分包含在内。如果我把它去掉它就可以了。 Base64.isBase64 只检查字符是否在 base64 字母表中,因此“Basic”一定是。

关于java - 授权 header 的 Grails Base64 解码在解码时格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218542/

相关文章:

java - 如何获得下周的第一天?

tomcat - 如何获取 Grails/Tomcat Webapp 的当前工作目录?

mysql - 如何转换存储的误编码数据?

wcf - 如何以编程方式更改 NetTcp 的 WCF 消息编码?

solaris - javac(和其他 jdk 可执行文件)产生 NoClassDefFoundError

java - 从数据库加载时填充加载缓存

unit-testing - 如何在Grails 3中运行单个集成测试?

grails - 如何在Grails中更改通过 'grails doc'生成的文件的CSS

regex - 从未知(对我来说)编码中删除不可打印的空格

java - 如何验证用户在java中输入的数据