JBoss 5 截断 base64 cookie 字符串的尾部 =

2024-06-21

从 JBoss 4 升级到 JBoss 5 后,我注意到最烦人的回归。它截断 base64 cookie 值的尾部等号 ('=')。

我花了很长时间才明白问题不是我的代码而是 JBoss 的,我用 google 搜索了一下,发现这是一个已知的问题issue https://jira.jboss.org/jira/browse/JBAS-7372 .

建议的解决方法是计算字符串长度并用尾随等号填充它(长度为 4 的重数)。

由于我们的应用程序可以在多个应用程序服务器上运行(例如 WebLogic、WebSpehere),因此我非常不愿意添加专门针对此版本的 JBoss 的这段代码。

有人遇到过这种情况吗?您能建议一个更聪明的解决方法吗?

edit:感谢@skaffman,我理解了我的问题,我一开始就不应该使用base64作为cookie字符串。有一个基于 64 的变体称为Base64 网址 http://en.wikipedia.org/wiki/Base64#URL_applications应该用于此类字符串(cookie、url...)。例如,Apache 编解码器库在其 Base 64 实现中支持此变体。


您是否可以控制 Cookie 的创建和编码/解码方式?如果是这样,那么您可以切换到另一种编码机制,该机制不使用可能与 cookie 规范冲突的字符。例如,Apache 通用编解码器 http://commons.apache.org/codec/包括一个Hex http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Hex.html可以对二进制数据与十六进制字符串进行编码和解码的类。它会比 Base64 中的等效数据大,但这可能并不重要。

或者,您可以玩Cookie http://java.sun.com/javaee/6/docs/api/javax/servlet/http/Cookie.htmlAPI 一点。 javadoc 为Cookie.setValue() http://java.sun.com/javaee/6/docs/api/javax/servlet/http/Cookie.html#setValue%28java.lang.String%29 says:

对于版本 0 cookie,值应该 不包含空格、括号、 括号,等号, 逗号, 双引号、斜杠、问题 标记、符号、冒号和 分号。空值可能不会 在所有浏览器上的行为方式相同。

所以从技术上来说,base64编码与版本0的cookie不兼容,这可能是默认的。你可以尝试打电话setVersion(1)cookie 上,看看这是否会产生影响,尽管这样您就会面临浏览器兼容性问题的风险。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JBoss 5 截断 base64 cookie 字符串的尾部 = 的相关文章

随机推荐