2017-01-10 6 views
0

У меня есть Java-приложение (сервлет), которое выполняет аутентификацию пользователя с помощью SalesForce Server OAuth Authentication Flow. Эта аутентификация OAuth предоставляет параметр состояния «состояние» для передачи любых данных при обратном вызове. У меня есть куча параметров, которые я хочу передать через этот параметр состояния. Каков наилучший способ сделать это? В частности, в java?Каков наилучший способ передать параметры multiply как один параметр http-запроса?

Или, другими словами, что является лучшим способом передать массив или карту в качестве одного параметра http-запроса?

+2

Вы могли бы рассмотреть кодирования его JSON, а затем кодирующая строку JSON с помощью Base64. Это удерживает большинство людей от обезьян с вашими параметрами и очень устойчиво при прохождении через OAuth и т. Д. – Jamie

+0

Спасибо, @Jamie, я сделал это таким образом, похоже на рабочее решение. –

ответ

1

Вы можете поместить все в формате json или xml или в любом другом формате, а затем закодировать в base64 как одну большую строку. Позаботьтесь о том, чтобы параметры могли наложить какой-то жесткий лимит на какой-либо браузер/веб-сервер.

+0

Спасибо, @ Daniel Luyo, я сделал это таким образом, похоже на рабочее решение. –

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}