第一种(不好的)方法是允许像下面的线程那样在url中使用斜杠字符
Encoded slash (%2F) with Spring RequestMapping path param gives HTTP 400
但我认为用base64编码加密文本似乎没有那么扭曲。
base64编码非常适合这种情况
信息在HTTP环境中使用。例如,数据库
将相对较大的唯一id(通常为128位UUID)编码为
在HTTP窗体或HTTP GET URL中用作HTTP参数的字符串
引自:
https://en.wikipedia.org/wiki/Base64
String encryptedText = "/O0sJjPUFgRGfND1TpHrkbyCalgY/rSpE8nhJ/wYjYY=";
String encryptedTextAndEncoded = new String(java.util.Base64.getEncoder().encode(encryptedText.getBytes()));
try {
// Using standard Base64 in URL requires encoding of '+', '/' and '='
encryptedTextAndEncoded = URLEncoder.encode(encryptedTextAndEncoded, "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String.format("%s%s", "youtube.com/videos/", encryptedTextAndEncoded);
生成的url将是:
youtube.com/videos/L08wc0pqUFVGZ1JHZk5EMVRwSHJrYnlDYWxnWS9yU3BFOG5oSi93WWpZWT0%3D
这是一个完全有效的网址
@GetMapping("/profile/client-users/{userId}")
public ModelAndView getAccountAccess(
@PathVariable String userId, ModelMap modelMap) {
String decoded = new String(java.util.Base64.getDecoder().decode(userId.getBytes()));
userId = EncryptionUtil.decrypt(decoded);
}