从URL检索编码值

时间:2012-09-26 10:04:17

标签: 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%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中存在正确的令牌,为什么我在打印中获得了不同的值...

请帮助......

3 个答案:

答案 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);