2013-11-05

Android Ajax Authentication using Android-Query and Grails Spring Security Plugin

This post shows code on client end only.

Code in fragment class:
private AQuery aq;
String svalue = null; // keep current session id

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
  Bundle savedInstanceState) {
  View rootView = inflater.inflate(R.layout.fragment_main, container, false);
  aq = new AQuery(getActivity(), rootView);

  aq.id(R.id.loginbutton).clicked(this, "onLoginButtonClick");
  aq.id(R.id.logoutbutton).clicked(this, "onLogoutButtonClick");
  aq.id(R.id.dobutton).clicked(this, "onDoButtonClick");
  return rootView;
}


Login:
public void onLoginButtonClick(View view) {
  String url = "http://10.0.3.2:8090/GrailsTest1/j_spring_security_check";
  Map<string object=""> params = new HashMap<string object="">();
  params.put("j_username", "admin");
  params.put("j_password", "admin");
  params.put("ajax", "true");

  cb = new AjaxCallback<jsonobject>();
  cb.url(url).type(JSONObject.class).params(params).weakHandler(this, "loginCallback");
  cb.header("Content-Type", "application/x-www-form-urlencoded");
  aq.ajax(cb);
}

public void loginCallback(String url, JSONObject json, AjaxStatus status) throws JSONException {
  if(json != null) {
    List<cookie> cookieList = new ArrayList<cookie>();
    cookieList = status.getCookies();
    for (Cookie cookie : cookieList) {
    if(cookie.getName().equals("JSESSIONID")) {
      svalue = cookie.getValue();
    } else {
      svalue = null;
    }
    
    // do something when succeed to log in
  } else {
    // do something when fail to log in
  }
}


Logout:
public void onButton3Click(View view) {
  String url = "http://10.0.3.2:8090/GrailsTest1/logout/index?ajax=true";
  Map<string object=""> params = new HashMap<string object="">();
  AjaxCallback<string> cb = new AjaxCallback<string>();
  if(svalue != null) cb.cookie("JSESSIONID", svalue);
  cb.url(url).type(JSONObject.class).params(params).weakHandler(this, "logoutCallback");
  aq.ajax(cb);
}

public void logoutCallback(String url, String json, AjaxStatus status) throws JSONException {
  if(json != null){
    // do something when succeed to log out
  }else{
    // do something when fail to log out
  }
}


Do something need to run with or whithout authentication:
public void onDoButtonClick(View view) {
  String url = "http://10.0.3.2:8090/GrailsTest1/main/doAction?ajax=true";
  AjaxCallback<string> cb = new AjaxCallback<string>();
  cb.url(url).type(JSONObject.class).weakHandler(this, "jsonCallback");
  if(svalue != null) cb.cookie("JSESSIONID", svalue);
  aq.ajax(cb);
}

public void jsonCallback(String url, JSONObject json, AjaxStatus status) throws JSONException {
  if(json != null){
    // do something when succeed to get data from server 
  }else{
    // do something when fail to get data from server
  }
}

No comments:

Post a Comment