2017-01-10 1 views
0

Ich habe Java-Web-Anwendung (Servlet), die Benutzer-Authentifizierung mit SalesForce Server OAuth Authentication Flow. Diese OAuth-Authentifizierung stellt Abfrageparameter "state" bereit, um alle Daten beim Rückruf zu übergeben. Ich habe eine Reihe von Parametern, die ich diesen "State" -Abfrageparameter übergeben möchte. Was ist der beste Weg, es zu tun? Vor allem in Java?Was ist der beste Weg, um Multiplikationsparameter als ein HTTP-Abfrageparameter zu übergeben?

Oder mit anderen Worten, was ist der beste Weg, um ein Array oder eine Karte als einen einzigen HTTP-Abfrageparameter übergeben?

+2

Sie betrachten könnte es in JSON codiert, und dann Codieren des JSON-String mit Base64. Das hält die meisten Leute davon ab, mit Ihren Parametern zu spielen, und ist sehr widerstandsfähig, wenn Sie OAuth usw. passieren. – Jamie

+0

Danke, @Jamie, ich habe es auf diese Weise gemacht, es scheint wie eine funktionierende Lösung. –

Antwort

1

Sie können alle im JSON- oder XML-Format oder einem anderen Format speichern und dann in Base64 als eine einzige große Zeichenfolge codieren. Achten Sie darauf, dass Parameter einige Browser/Webserver stark einschränken können.

+0

Danke, @Daniel Luyo, ich habe es so gemacht, scheint wie Arbeitslösung. –

1

Also, ich habe es so gemacht. Danke Jungs! Hier sind einige Code-Schnipsel zu zeigen, wie es funktioniert für mich:

// 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); 

Hier Ausgabe lautet:

stateJSON: {"1":"111","2":"222","3":"333"} 
stateQueryParam: eyIxIjoiMTExIiwiMiI6IjIyMiIsIjMiOiIzMzMifQ== 

stateMap: {1=111, 2=222, 3=333} 
Verwandte Themen