Я использую Volley, чтобы запросить сеансовую кухню ie из моего REST Api. Действие берет очередь запросов из синглтона, и в этом классе я также установил CookieManager.
На новом телефоне с Android Api 26 повар ie находится в заголовке запроса из следующего запроса.
На более старом телефоне с Api 22 cook ie присутствует только в заголовке запроса, если домен не содержит дефиса (например, http://abc-def/... -> в cook ie Domain=abc-def;
).
Запрос на вход в систему всегда успешно. Есть ли шанс решить эту проблему?
Мой синглтон:
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.Volley;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
public class MySingleton {
private static MySingleton instance;
private RequestQueue requestQueue;
private static Context ctx;
private MySingleton(Context context) {
ctx = context;
requestQueue = getRequestQueue();
}
public static synchronized MySingleton getInstance(Context context) {
if (instance == null) {
instance = new MySingleton(context);
}
return instance;
}
public RequestQueue getRequestQueue() {
if (requestQueue == null) {
CookieHandler.setDefault(new CookieManager( null, CookiePolicy.ACCEPT_ALL ));
requestQueue = Volley.newRequestQueue(ctx.getApplicationContext());
}
return requestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
}
Запрос на вход:
JSONObject login = new JSONObject();
Activity act=this;
try {
login.put("Username",etUserName.getText());
login.put("Password",etPassword.getText());
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(Request.Method.POST, url, login, response -> {
try {
if(response.has("status") && response.getString("status").equals("ok")
&& response.has("user")){
Toast.makeText(act, R.string.login_succsess,
Toast.LENGTH_LONG).show();
Intent myIntent=getIntent();
Bundle b=new Bundle();
b.putString(getString(R.string.intent_user),response.getString("user"));
myIntent.putExtras(b);
setResult(RESULT_OK,myIntent);
finish();
}else if(response.has("status") && response.getString("status").equals("locked")){
Toast.makeText(act, R.string.user_locked,
Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(act, R.string.login_fail,
Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}, error -> {
if(error instanceof AuthFailureError) {
Toast.makeText(this, R.string.login_fail,
Toast.LENGTH_LONG).show();
}else if(error instanceof NoConnectionError) {
Toast.makeText(this, R.string.no_connection,
Toast.LENGTH_LONG).show();
}else{
error.printStackTrace();
}
});
jsonObjectRequest.addMarker(TAG);
MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest);