1

我在 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 中,为什么我在打印中得到如此不同的值...

请帮助......

4

3 回答 3

3

request.getParameter("token")解码参数值,因此打印的值是 URL 中参数值的解码版本。

有关详细信息,请参阅Java EE、url 中的重音、request.getParameter 错误值

于 2012-09-26T10:12:26.840 回答
1

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

通过 URL 编码值,这些特殊字符被替换为特殊字符的字符%nn代码nn的代码。

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

于 2012-09-26T10:15:43.327 回答
1

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

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);
于 2012-09-26T11:07:43.410 回答