[英]Cannot get '#' symbol in Controller using Spring @RequestParam
我有以下请求 Url /search? 字符集=UTF-8&q=C%23C%2B%2B。 我的 controller 看起来像
@RequestMapping(method = RequestMethod.GET, params = "q")
public String refineSearch(@RequestParam("q") final String searchQuery,....
在这里我有 searchQuery = 'CC++'。 “#”编码为“%23”,“+”编码为“%2B”。 为什么 searchQuery 不包含“#”?
最后我发现了一个问题。在过滤器链中,ServletRequest 用 DefaultXSSValueTranslator 包裹在 XSSRequestWrapper 中,这里是方法 String stripXSS(String value) 迭代模式列表,如果值与模式匹配,方法将删除它。 模式列表包含 "\#" 模式,'#' 将被替换为 ""
DefaultXSSValueTranslator.
private String stripXSS(String value) {
Pattern scriptPattern;
if (value != null && value.length() > 0) {
for(Iterator var3 = this.patterns.iterator(); var3.hasNext(); value = scriptPattern.matcher(value).replaceAll("")) {
scriptPattern = (Pattern)var3.next();
}
}
return value;
}
我通过对 hash 部分进行编码的 URL 解决了类似的问题。 我们有 Spring web 服务器以及 JS 和 VueJS 客户端的混合。 这解决了我的问题:
const location = window.location; const redirect = location.pathname + encodeURIComponent(location.hash);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.