webentwicklung-frage-antwort-db.com.de

Wie benutzt man die Basisauthentifizierung mit Volley unter Android?

Ich schaue durch Beispiele und Code, sehe aber nichts implementiert. Ist das zu diesem Zeitpunkt möglich?

20
LocoMike

Ja es ist möglich. Sie müssen Request.getHeaders () überschreiben. Ich bin faul und ich habe HttpHeaders und HttpAuthentication von Spring für Android verwendet, aber Sie können nur den Auth-Header erstellen und aus der Methode zurückgeben. Über getHeaders () können Sie den Auth-Header für grundlegende Auth zurückgeben. Dies ist eine Musteranfrage mit Basisauthentifizierung. 

public class GetUser extends Request<User> {

    private static final String TAG = GetUser.class.getName();

    private Response.Listener<User> mListener;
    private ObjectMapper mMapper = new ObjectMapper();

    public GetUser(Response.ErrorListener errorListener, Response.Listener<User> listener){
        super(Method.GET, PoisUtils.BASE_URL + "/users", errorListener);

        mListener = listener;
    }

    @Override
    protected Response<User> parseNetworkResponse(NetworkResponse response) {
        String jsonString = new String(response.data);
        try {
            User result = mMapper.readValue(jsonString, User.class);
            return Response.success(result, getCacheEntry());
        } catch (IOException e) {
            Log.d(TAG, e.getMessage());
        }
        return null;
    }

    @Override
    protected void deliverResponse(User response) {
        mListener.onResponse(response);
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        return AuthUtils.buildAuthHeaders().toSingleValueMap();
    }
}

Und so baue ich die Auth-Header

public static HttpHeaders buildAuthHeaders(){

    if(UserUtils.isUserLogged()){
        HttpHeaders requestHeaders = new HttpHeaders();
        User user = PoisApplication.get().getUser();

        HttpAuthentication auth = new HttpBasicAuthentication(
                user.getUsername(), user.getPassword());
        requestHeaders.setAuthorization(auth);

        return requestHeaders;
    }
    return null;
}
9
alex

Für alle, die Spring nicht nur für Android nutzen möchten, erfahren Sie hier, wie Sie dies tun.

@Override
public Map<String, String> getHeaders() throws AuthFailureError {
    HashMap<String, String> params = new HashMap<String, String>();
    String creds = String.format("%s:%s","USERNAME","PASSWORD");
    String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
    params.put("Authorization", auth);
    return params;
}

Beachten Sie, dass Sie möglicherweise Base64.NO_WRAP anstelle von Base64.DEFAULT verwenden müssen, damit dies funktioniert. Wie in den Kommentaren erwähnt.

API 8+

78
Androiderson

Für eine Proxy-Autorisierung (wie Squid) verwenden Sie diesen Header:

String credentials = proxyUsername + ":" + proxyPassword;
String auth = "Basic "  + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);                
headers.put("Proxy-Authorization", auth);
0
earlypearl