Tôi đang cố gắng sử dụng UriComponentsBuilder của mùa xuân để tạo một số url cho tương tác oauth. Các tham số truy vấn bao gồm các thực thể như url gọi lại và giá trị tham số có dấu cách trong chúng.Mã hóa URL bằng cách sử dụng Spring UriComponentsBuilder
Cố gắng sử dụng UriComponentBuilder (vì UriUtils hiện đang bị phản đối)
UriComponentsBuilder urlBuilder = UriComponentsBuilder.fromHttpUrl(oauthURL);
urlBuilder.queryParam("client_id", clientId);
urlBuilder.queryParam("redirect_uri", redirectURI);
urlBuilder.queryParam("scope", "test1 test2");
String url = urlBuilder.build(false).encode().toUriString();
Thật không may, trong khi không gian trong tham số phạm vi được thay thế thành công với '+', tham số redirect_uri không phải là ở tất cả các url được mã hóa.
ví dụ,
redirect_uri=https://oauth2-login-demo.appspot.com/code
nên đã kết thúc
redirect_uri=https%3A%2F%2Foauth2-login-demo.appspot.com%2Fcode
nhưng đã bị ảnh hưởng. Lặn vào mã, org.springframework.web.util.HierarchicalUriComponents.Type.QUERY_PARAM.isAllowed đặc biệt (c):
if ('=' == c || '+' == c || '&' == c) {
return false;
}
else {
return isPchar(c) || '/' == c || '?' == c;
}
cho phép rõ ràng ':' và '/' nhân vật, mà theo kẹo cao su, nó shouldn' t. Nó phải được làm một số loại mã hóa khác, mặc dù cho cuộc sống của tôi, tôi không thể tưởng tượng những gì. Tôi có sủa cây sai ở đây không?
Cảm ơn
Điều này không đúng, vì '&' và các ký tự khác có ý nghĩa cũng không được thoát. UriComponentsBuilder không phải là mã hóa url tham số truy vấn. –
@Adam Millerchip, tôi không hiểu - chắc chắn & _is_ bị trốn thoát.OP đã dán đoạn trích đoạn mã cho biết rằng & không được phép, cũng không phải là = hoặc +. Tất cả những thứ này sẽ bị thoát. – simonh
Bạn sẽ nghĩ như vậy, nhưng không. Hãy thử nó và xem. –