在Android上如何使用Volley进行基本身份validation?
我正在通过示例和代码,但我没有看到任何实施。 这个阶段可能吗?
是的,这是可能的。 你需要重写Request.getHeaders()。 我很懒,我使用Android的HttpHeaders和HttpAuthentication,但你可以build立auth头并从方法返回它。 从getHeaders(),你可以返回auth头来进行基本authentication。 这是一个带有基本身份validation的示例请求。
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(); } }
这里是我如何构buildauth头文件
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; }
对于那些不想仅仅为了使用Spring而使用Spring的人,下面是如何做到这一点。
@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
才能正常工作。 正如评论中指出的那样。
API 8+
对于代理授权(如鱿鱼)使用此标头:
String credentials = proxyUsername + ":" + proxyPassword; String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); headers.put("Proxy-Authorization", auth);