我有使用SalesForce Server OAuth Authentication Flow进行用户身份验证的java Web应用程序(servlet)。此OAuth身份验证提供“状态”查询参数以传递回调上的任何数据。我有一堆参数,我想通过这个“状态”查询参数。最好的方法是什么?特别是在java中?
或者换句话说,将数组或映射作为单个http查询参数传递的最佳方法是什么?
答案 0 :(得分:1)
您可以将所有内容放在json或xml格式或任何其他格式中,然后在base64中编码为一个大字符串。请注意,params可以对某些浏览器/ Web服务器施加一些硬限制。
答案 1 :(得分:1)
所以,我这样做了。感谢你们!以下是一些代码片段,用于说明它对我有用:
// forming state query parameter
Map<String, String> stateMap = new HashMap<String, String>();
stateMap.put("1", "111");
stateMap.put("2", "222");
stateMap.put("3", "333");
JSONObject jsonObject = new JSONObject(stateMap);
String stateJSON = jsonObject.toString();
System.out.println("stateJSON: " + stateJSON);
String stateQueryParam = Base64.encodeBase64String(stateJSON.getBytes());
System.out.println("stateQueryParam: " + stateQueryParam);
// getting map from state query param
ObjectMapper objectMapper = new ObjectMapper();
stateMap = objectMapper.readValue(Base64.decodeBase64(stateQueryParam.getBytes()), LinkedHashMap.class);
System.out.println("stateMap: " + stateMap);
这是输出:
stateJSON: {"1":"111","2":"222","3":"333"}
stateQueryParam: eyIxIjoiMTExIiwiMiI6IjIyMiIsIjMiOiIzMzMifQ==
stateMap: {1=111, 2=222, 3=333}