Google App Engine SDK: HttpClient authentication on localhost
public class AppEngineLocalhostClient {
public String authenticateAtLocalhost(
String username,
boolean asAdmin,
String redirectUrl) throws Exception {
HttpClient httpClient = new DefaultHttpClient();
httpClient.getParams().setBooleanParameter(
ClientPNames.HANDLE_REDIRECTS, false);
HttpPost httpPost = new HttpPost("http://localhost:8888/_ah/login");
httpPost.setHeader("Content-Type","application/x-www-form-urlencoded");
String email = URLEncoder.encode(username, "UTF-8");
httpPost.setEntity(
new StringEntity(
"email=" + email +
"&continue=" + redirectUrl +
(asAdmin?"&isAdmin=on":"")));
HttpResponse response = httpClient.execute(httpPost);
String authenticationCookie
= response.getFirstHeader("Set-Cookie").getValue();
httpClient.getConnectionManager().shutdown();
return authenticationCookie;
}
public static void main(String[] args) throws Exception {
AppEngineLocalhostClient client = new AppEngineLocalhostClient();
String username="test@example.com";
boolean iWantToBeAdmin = true;
String afterLoginGetMeToThisUrl
= URLEncoder.encode("http://localhost:8888", "UTF-8");
String authenticationCookie = client.authenticateAtLocalhost(
username,
iWantToBeAdmin,
afterLoginGetMeToThisUrl);
// ... access the REST interface authenticated
HttpGet httpget = new HttpGet("http://localhost:8888/rest");
httpget.addHeader("Cookie", authenticationCookie);
// ...
}
}
When developing a Google App Engine application using SDK on localhost you sometimes need to authenticate programatically. For example in case that your application has a REST-style interface like CoachingNotebook. It took me a bit of time to determine how exactly to do that - lets save it for you.Labels: appengine, coaching-notebook, httpclient, localhost, REST, sdk


