Java 从URL检索编码值

Java 从URL检索编码值,java,web-services,single-sign-on,url-parameters,ondemand,Java,Web Services,Single Sign On,Url Parameters,Ondemand,我在URL中传递了一个编码的SSO令牌…所以URL看起来像 http://127.0.0.1:7101/CRMOD_UCM-Sankalp-context-root/BrowseFile.jsp?token=%246%24zhxjx%2fpz6dVucl9cgG43ii2Tr4qVnNbeqJg8jCy6Jj7vRvXN4%3d%3b%246%24GlRGp%2fxfEM308NZGmY%2fhjHav2yjHSvbww1l0%2fCcCtcVjzl%2bCQFlQPdBRKO0t1XUmF0

我在URL中传递了一个编码的SSO令牌…所以URL看起来像

 http://127.0.0.1:7101/CRMOD_UCM-Sankalp-context-root/BrowseFile.jsp?token=%246%24zhxjx%2fpz6dVucl9cgG43ii2Tr4qVnNbeqJg8jCy6Jj7vRvXN4%3d%3b%246%24GlRGp%2fxfEM308NZGmY%2fhjHav2yjHSvbww1l0%2fCcCtcVjzl%2bCQFlQPdBRKO0t1XUmF0I6xLmfQ%2fnb7VgJeSYnvrAb9YUQQ3tvr%2fBZ%2bIRZiBAGU2%2fZg%3d
但是当我检索变量的值并使用 out.println(“SSO令牌:+request.getParameter(“令牌”); 它打印

$6$zhxjx/PZ6DVUCL9CGG43II2TR4QVNbQJG8JCY6J7VRVxN4=$6$GlRGp/xfEM308NZGmY/hjHav2yjHSvbww1l0/CcCtcVjzl+CQFlQPdBRKO0t1XUmF0I6xLmfQ/NB7VGjesynVRAB9YUQ3TVR/BZ+IRZiBAGU2/Zg=

正确的标记是URL中存在的标记,为什么我在打印中得到如此不同的值

请帮助……

请求。getParameter(“令牌”)
解码参数值,因此打印的值是URL中参数值的解码版本

有关更多信息,请参阅。

请求。getParameter(“令牌”)对参数值进行解码,因此打印的值是URL中参数值的解码版本

有关更多信息,请参阅。

在URL中,标记为。这是必要的,因为某些字符在URL中具有特殊含义

通过对值进行URL编码,这些特殊字符将替换为
%nn
代码,其中
nn
是特殊字符的字符代码

Java会自动为您解码它,以便您在调用
request.getParameter(“令牌”)
时获得实际值,而不是URL编码的值。

在URL中,令牌是。这是必要的,因为某些字符在URL中具有特殊含义

通过对值进行URL编码,这些特殊字符将替换为
%nn
代码,其中
nn
是特殊字符的字符代码


Java自动为您解码,这样您在调用
request.getParameter(“token”)
而不是URL编码的值时就可以得到实际值。

如果您想要解码,就可以得到编码的值,然后使用以下代码。默认情况下,系统会为我们解码,但在您的情况下,它不会被解码,您必须显式解码request.getParameter(“令牌”)的值


如果您想要解码,您将获得编码值,然后使用以下代码。默认情况下,系统会为我们解码,但在您的情况下,它不会被解码,您必须显式解码request.getParameter(“令牌”)的值


实际上%nn表示一个字节,它取决于字节字符映射使用的web服务器配置。举个例子,Tomcat使用ISO-8859-1来表示Tomcat,但我不知道它是否改变了。因此,当您对该值进行编码并使用相同的编码时,您必须小心。这是一个巨大的安全威胁,因为带有URL的neone可以简单地用来对令牌进行去编码,您能告诉我如何避免这种情况吗?事实上%nn代表一个字节,这取决于web服务器配置,字节字符映射使用的配置。举个例子,Tomcat使用ISO-8859-1来表示Tomcat,但我不知道它是否改变了。因此,当您对该值进行编码并使用相同的编码时,您必须小心。这是一个很大的安全威胁,因为带有URL的neone可以简单地用于对令牌进行脱码,您能告诉我如何避免这种情况吗?这是一个很大的安全威胁,因为带有URL的neone可以简单地用于对令牌进行脱码,你能告诉我如何避免这种情况吗?这是一个很大的安全威胁,因为带有URL的neone可以简单地用来对令牌进行脱码,你能告诉我如何避免这种情况吗
String token = request.getParameter("token").toString();
// To decode url
String decodedtoken = URLDecoder.decode(token , "UTF-8");
System.out.println("Decoded token value "+ decodedtoken);

// To encode url 
String encodedtoken = URLEncoder.encode(token , "UTF-8"); 
System.out.println("Encoded token value "+ encodedtoken);