【发布时间】:2019-12-27 15:38:58
【问题描述】:
我对应该在 url 中发送的变量中的斜杠有一些问题。 例如 id 可能是这样的:
ID: /gfdge1/DkxA8P+jYw43
URL: localhost:8080/find-user//gfdge1/DkxA8P+jYw43
"error": "Internal Server Error",
"exception": "org.springframework.security.web.firewall.RequestRejectedException",
"message": "The request was rejected because the URL was not normalized.",
因为这个斜线放在第一位,所以问题
在此之前,我在 ID 中间遇到了这些斜线的问题,但我已经用这段代码解决了这个问题:
@RequestMapping(name = "Get user data by ID", value = "/find-user/{userId}/**", method = RequestMethod.GET)
@ResponseBody
public User getUserData(@PathVariable String userId, HttpServletRequest request) {
final String path =
request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE).toString();
final String bestMatchingPattern =
request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE).toString();
String arguments = new AntPathMatcher().extractPathWithinPattern(bestMatchingPattern, path);
String id="";
if (null != arguments && !arguments.isEmpty()) {
id = userId + '/' + arguments;
} else {
id = userId;
}
return userService.getUserData(id);
}
但是当斜线放在首位时,这不适用于这种情况。 我也尝试使用 RequestParam 而不是 PathVariable,但它有一些特殊字符的问题,例如当我使用 RequestParam 时,它用空格替换“+”,...
谁能帮我解决这个问题?
【问题讨论】:
-
您的 ID 是否以
/开头? -
@ConstantinBeer 是的
标签: java spring spring-boot path-variables