私は、Javaアプリケーションを通じてkeycloakサーバーにヒットしています。私はパラメータと一緒に郵便番号の上でURLを実行すると、私は応答トークンを取得していますが、私はjavaを介して同じことをしようとすると、それはエラーを投げている。以下は私のコードです:私はライン "con.getInputStream()" に以下のエラーが出ますサーバーからHTTP応答コード:400が返されました。キークローキング
public void login() {
try {
String uri = "http://localhost:7080/auth/realms/demo/protocol/openid-connect/token";
URL url = new URL(uri);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setDoInput(true);
con.setDoOutput(true);
con.setReadTimeout(10000);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("grant_type", "password"));
params.add(new BasicNameValuePair("client_id", "SuperAdminPortal"));
params.add(new BasicNameValuePair("username", "admin"));
params.add(new BasicNameValuePair("password", "demo"));
OutputStream oss = con.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(oss, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
oss.close();
con.connect();
con.getInputStream()
}
catch (Exception ex)
{ex.printStackTrace();}
}
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException
{
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params)
{
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
11:05:08,346 ERROR [stderr] (default task-6) java.io.IOException: Server returned HTTP response code: 400 for URL: http://localhost:7080/auth/realms/demo/protocol/openid-connect/token
すべての情報はかなりあります。
うん。 POST本体のフォームとしてパラメータを送信する必要があります。したがって、post.setEntity(新しいUrlEncodedFormEntity(urlParameters));トリックをやっている。 – Boomer