首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android上通过Volley使用基本身份验证?

如何在Android上通过Volley使用基本身份验证?
EN

Stack Overflow用户
提问于 2013-05-29 23:26:01
回答 3查看 34.5K关注 0票数 26

我正在查看示例和代码,但我没有看到任何实现。在这个阶段这是可能的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-30 01:02:14

是的这是可能的。您需要重写Request.getHeaders()。我很懒,我使用了Spring for Android中的HttpHeaders和HttpAuthentication,但您可以只构建auth头文件并从方法中返回它。在getHeaders()中,可以返回基本身份验证的身份验证头。这是一个具有基本身份验证的示例请求。

代码语言:javascript
复制
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();
    }
}

下面是我如何构建auth头文件

代码语言:javascript
复制
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;
}
票数 10
EN

Stack Overflow用户

发布于 2013-09-24 19:32:39

对于那些不想使用Spring For Android的人来说,这里是如何做到这一点的。

代码语言:javascript
复制
@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;
}

请注意,您可能必须使用Base64.NO_WRAP而不是Base64.DEFAULT才能正常工作。正如评论中指出的那样。

接口8+

票数 91
EN

Stack Overflow用户

发布于 2017-02-15 18:35:44

对于代理授权(如squid),请使用此标头:

代码语言:javascript
复制
String credentials = proxyUsername + ":" + proxyPassword;
String auth = "Basic "  + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);                
headers.put("Proxy-Authorization", auth);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16817980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档