首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在action类中处理时,获取参数+替换为空格

在action类中处理时,获取参数+替换为空格
EN

Stack Overflow用户
提问于 2013-07-08 18:27:58
回答 4查看 2.3K关注 0票数 3

我使用BasicTextEncryptor加密文本“再见,朋友”。因此,加密值如下所示,

代码语言:javascript
运行
复制
3qe80L1ap+cR2zRU9csFwOffw5NtWTueLRYgSXyjctI=

然后,我通过电子邮件将上述参数作为令牌的URL发送给用户。

然后用户复制下面的URL并按enter,

代码语言:javascript
运行
复制
http://localhost:8080/token=3qe80L1ap+cR2zRU9csFwOffw5NtWTueLRYgSXyjctI=

但是当我通过action方法访问Struts2应用程序中的参数时,它给出了加密参数,如下所示:

代码语言:javascript
运行
复制
3qe80L1ap cR2zRU9csFwOffw5NtWTueLRYgSXyjctI=

" "取代了+。所以当我解密它的时候,它给了我EncryptionOperationNotPossibleException

struts是否将+解码为" ",假设浏览器+是一个编码字符?在这种情况下,在我继续解密之前,可以将空格替换为+

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-08 18:35:17

一种更好的方法是在将字符串附加到实际的URL之前对其进行"URL编码“。

代码语言:javascript
运行
复制
URLEncoder.encode("3qe80L1ap+cR2zRU9csFwOffw5NtWTueLRYgSXyjctI=", "ISO-8859-1");

这将确保令牌被正确解码。

为了回答您的问题,struts在解码URL参数方面没有任何作用。解码URL参数是应用服务器的核心功能。因此,每个HTTP参数在到达应用程序代码之前都要经过解码。

无论服务器解码什么,应用程序都可以使用(例如,在您的例子中是Struts )。)

现在来解释为什么+不能到达您的struts。

代码语言:javascript
运行
复制
java.net.URLDecoder.decode("3qe80L1ap+cR2zRU9csFwOffw5NtWTueLRYgSXyjctI="));

它返回3qe80L1ap cR2zRU9csFwOffw5NtWTueLRYgSXyjctI=

这意味着+不会得到网址解码。

因此,重申一下,每个HTTP参数(查询字符串或表单POST)在到达应用程序代码之前都要经过解码。

当您对字符串进行URL编码时,+将被编码为%2B,并且您的struts应用程序将收到正确的解码字符串。

票数 7
EN

Stack Overflow用户

发布于 2013-07-08 18:35:34

您不需要将base64编码字符串放在那里,而是使用UrlEncoder对其进行编码,如下所示:

代码语言:javascript
运行
复制
URLEncoder.encode("3qe80L1ap+cR2zRU9csFwOffw5NtWTueLRYgSXyjctI=", "UTF-8")

这样你就可以把它放在链接里了。

票数 3
EN

Stack Overflow用户

发布于 2013-07-08 19:06:59

URL不能包含空格。URL编码通常用+符号替换空格。

因此,服务器正常地将+符号解码为空格。请参阅URLEncoder文档或阅读Java URL encoding of query string parameters

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17524349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档