非法参数错误-a-header-value-must-not-end-with-\r-or-\n

35次阅读

共计 735 个字符,预计需要花费 2 分钟才能阅读完成。

1. 问题

在将生成的 token 放入头信息中,报如下错误

originalResponse.getHeaders().add(JWTConstant.H5_CLIENT_TOKEN, token);

错误

java.lang.IllegalArgumentException: a header value must not end with '\r' or '\n':eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJLUWo1UGthQS9FZU4vUnQzTEFvQXJOTHhLTFBrY0lzeklPNFV5cnlKaGtaOGg2YkVRaEFNeGIzU0YxaUc2S1pPIiwiaXNzIjoieGlheXUiLCJzdWIiOiJ4aWF5dS11c2VyIiwiYXVkIjoieGlheXUtdXNlciIsImlhdCI6Ij\r\nIwMjAwNzA1VDAwMzEwMS43MTYrMDgwMCIsIm5iZiI6IjIwMjAwNzA1VDAw\r\nMzEwMS43MTYrMDgwMCIsImV4cCI6IjIwMjAwNzA1VDAwMzEwNS4zMTYrMDgwMCJ9.a91ea52fea38bdd343bde3488ed35d9c0ad8e522c22d264b3d88c287d144aff4

\r\n 是我添加上去的 

token 在生成过程中,使用了 Base64 进行编码,java 原生的 base64 编码按照规范会在 64 个字符后自动加 rn, 就导致了这个问题。

解决方法:
a. 将生成后包含的 rn 字符串去掉
b. 换成 Apache commons 家族中的 common codec 工具进行 base64 编解码,我采用的是这种方案。

正文完
 0