0

我是 java 新手,我正在尝试编写一个实用程序 api 来加密/解密字符串。我有我的控制器和请求映射工作,我有加密/解密方法工作。

我遇到的问题是解密包含正斜杠('/')的字符串。如果我在 url 中未编码(例如http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC/4Oqpu7FZQ==),那么 url 路由会中断(原因很明显)。

如果我对其进行 url 编码(例如http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC%2F4Oqpu7FZQ==),则路径变量中的值为空。

另请注意,http://localhost:8080/api/package/util/decrypt/oJfTtchpM9WC(无斜线)工作正常。

似乎每当我在路径变量中输入“%”时,我都会得到一个空白页作为响应。不打方法。不会抛出异常(我可以找到 - 再次,我仍在学习环境)

我已经简化了我的解密方法,只输出表示为的路径变量data

@RequestMapping(value = "/util/decrypt/{data}", method = RequestMethod.GET)
@ResponseBody
public String decrypt(HttpServletResponse httpResponse,
        @PathVariable String data) throws Exception 
{
    return data;
    //    return URLDecoder.decode(data, "UTF-8");
}

任何人都可以向我解释发生了什么以及我如何才能让它发挥作用?

非常感谢!!

4

1 回答 1

0

我更新了我的加密方法以使用函数encodeBase64URLSafeString(与仅 encodeBase64String 相比),并将其更改为将数据作为标准请求参数(即 ?data=string)传递。这消除了问题。

使用 base64 算法的 URL 安全变体对二进制数据进行编码,但不分块输出。url-safe 变体发出 - 和 _ 而不是 + 和 / 字符。注意:没有添加填充。

于 2013-07-10T23:07:19.367 回答