Java 令牌编码/解码问题-Spring

Java 令牌编码/解码问题-Spring,java,spring,Java,Spring,我在使用URL编码器和URL解码器时遇到问题 看起来是这样的: 令牌的示例: 3vv3XIvofg3KIoMjLwU07329C6dsk8HJceuDT2F5jOwox2hyqAnL+03TPej/lW4TCeFWRadRkPKgW0aGxq+9B1VZLMvoevyFfaVXhvzIyLF8AN3NDCqk0hoqb51wlGtb4hUvOYKq5b63wuW2pfssr9O0dgCEK4VZz8QZ4jRpxZw= 我在Spring应用程序中为客户设置了令牌。然后我对令牌进行编码以在url

我在使用URL编码器和URL解码器时遇到问题

看起来是这样的: 令牌的示例:

3vv3XIvofg3KIoMjLwU07329C6dsk8HJceuDT2F5jOwox2hyqAnL+03TPej/lW4TCeFWRadRkPKgW0aGxq+9B1VZLMvoevyFfaVXhvzIyLF8AN3NDCqk0hoqb51wlGtb4hUvOYKq5b63wuW2pfssr9O0dgCEK4VZz8QZ4jRpxZw=
我在Spring应用程序中为客户设置了令牌。然后我对令牌进行编码以在url中使用它:

String token = // generated by mechanism
String encodedToken = UrlEncoder.encode(token, "UTF-8");

String url = "https://myapp.url?token=" + encodedToken;
我作为@RequestParam接收令牌。然后,该令牌由URLDecover解码

String decodedToken = UrlDecoder.decode(token, "UTF-8");
问题如下:
有时它工作正常,我能够通过令牌找到用户,但有时我会出错,因为解码的令牌无效,并且它看起来与令牌不同。有什么问题?这是很奇怪的,因为它有时有效,有时无效。由于
@RequestParam
注释,您的令牌已经被Spring解码了。 如果令牌包含
+
,则第二次解码将用
(空白)替换
+

我假设您使用的是
java.net.URLEncoder
java.net.urldecker
?正如
encode(String,String)
decode(String,String)
方法的Javadoc所描述的,它们编码到
应用程序/x-www-form-urlencoded
格式,并从中解码。在此格式中,
+
是一个特殊字符,用于替换空格。

因此,
+
将被编码为
%2B
并解码为
。因为Spring已经完成了解码,所以
%2B
将再次成为
+
。您的第二次解码将其转换为
,令牌将不再匹配。

令牌可以包含什么类型的字符?代币有多长?@qutax我在编辑我的帖子,展示代币的例子,所以只有
A-Z
A-Z
0-9
+
/
=/code>?很抱歉,如果一个示例令牌有时有效,有时无效,那么仅此一个示例是不够的。您能否包括一个成功解码的令牌和一个未成功解码的令牌的示例。是的,是的,我意识到是这样的。谢谢你的帮助。我删除了解码,它工作了