我已经在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 Token:”+ request.getParameter(“token”)); 它打印
$ 6 $ zhxjx / pz6dVucl9cgG43ii2Tr4qVnNbeqJg8jCy6Jj7vRvXN4 =; $ 6 $ GlRGp / xfEM308NZGmY / hjHav2yjHSvbww1l0 / CcCtcVjzl + CQFlQPdBRKO0t1XUmF0I6xLmfQ / nb7VgJeSYnvrAb9YUQQ3tvr / BZ + IRZiBAGU2 / ZG =
URL中存在正确的令牌,为什么我在打印中获得了不同的值...
请帮助......
答案 0 :(得分:3)
request.getParameter("token")
解码参数值,因此打印的值是URL中参数值的解码版本。
有关详细信息,请参阅Java EE, accent in url, request.getParameter wrong value。
答案 1 :(得分:1)
在网址中,令牌为URL encoded。这是必要的,因为某些字符在URL中具有特殊含义。
通过对该值进行编码,这些特殊字符将替换为%nn
代码,其中nn
是特殊字符的字符代码。
Java会自动为您解码,以便在您调用request.getParameter("token")
而不是URL编码值时获得实际值。
答案 2 :(得分:1)
如果要解码,则获取编码值,然后使用以下代码。默认情况下系统解码为我们,但在你的情况下,它不解码,你必须显式解码request.getParameter(“令牌”)的值。
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);