Java 从URL检索编码值
我在URL中传递了一个编码的SSO令牌…所以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
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);