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 编解码,我采用的是这种方案。