[英]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.