2017-01-10 5 views
0

私はSalesForce Server OAuth Authentication Flowを使ってユーザー認証を行うJava Webアプリケーション(サーブレット)を持っています。このOAuth認証は、コールバックのデータを渡すための「状態」クエリパラメータを提供します。私は、この "状態"クエリパラメータを渡したいパラメータをたくさん持っています。それを行う最善の方法は何ですか?特にJavaでは?乗算パラメータを1つのhttpクエリパラメータとして渡す最も良い方法は何ですか?

つまり、配列またはマップを単一のhttpクエリパラメータとして渡す最も良い方法は何ですか?

+2

あなたはJSONでそれをコード化して、Base64でを使用してJSON文字列を符号化することを検討してください。これは、ほとんどの人があなたのパラメータで猿をするのを防ぎ、OAuthなどを通過するときに非常に弾力性があります。 – Jamie

+0

ありがとう、@ジェイミー、私はこのようにしました。 –

答えて

1

すべてをjsonまたはxml形式または他の形式で入力し、次にbase64で1つの大きな文字列としてエンコードできます。 paramsがいくつかのブラウザ/ Webサーバーにいくつかの厳しい制限を課す可能性があることに注意してください。

+0

ありがとう、ダニエル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} 
関連する問題