在Spring MVC中禁用URL解码

时间:2018-04-16 21:28:06

标签: spring-mvc spring-boot kotlin

我有以下端点

@RequestMapping("missedcall")
fun missedCall(@RequestParam("v") encryptedValue : String, model: 
ModelMap): String {
    //decrypt encryptedValue here
}

当我使用“http://myurl.com/missedcall?v=this+is+my+encrypted+string”执行此端点时,encryptedValue初始化为“这是我的加密字符串”。我实际上想要加号,因为它们是加密的一部分,如果没有它们我就无法解密字符串。

解决方法是将URL编码回字符串以恢复其他特殊字符,但是有更清洁的方法吗?也许禁用此特定端点的URL解码?

注意:我无法在正文中传递此参数,它必须是查询字符串的一部分。这也是用Kotlin写的,但我100%肯定Java有类似的问题,所以不要觉得Kotlin气馁:)。

2 个答案:

答案 0 :(得分:3)

任何Web框架都会为您解密查询路径,因为这是预期的行为。如果这不是你想要的,你将不得不定义一个类型为HttpServletRequest的方法参数,并使用HttpServletRequest.getQueryString()自己解析查询。

答案 1 :(得分:0)

感谢@SeanPatrickFloyd,将其实现为

@RequestMapping("missedcall")
fun missedCall(request: HttpServletRequest, model: ModelMap): String {
    val encodedValue = request.queryString.split("=")[1]
    //decrypt encryptedValue here
}