我正在查看示例和代码,但我没有看到任何实现。这个阶段可能吗?如何在Android上使用Volley进行基本身份验证?
回答
是的,这是可能的。您需要重写Request.getHeaders()。我很懒,我使用Spring的HttpHeaders和HttpAuthentication,但是你可以构建auth头并从方法返回。从getHeaders()您可以返回auth标头进行基本身份验证。这是一个带有基本身份验证的示例请求。
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();
}
}
这里是我如何建立权威性头
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的Android只是针对谁,这里是如何做到这一点。
@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+
这真的很不错,因为APK的最终大小对于小型项目非常重要。 – slott
值得注意的是我需要使用Base64.NO_WRAP而不是Base64.DEFAULT才能为我工作。 – Logiraptor
@Logiraptor您的评论帮助我解决了Andrpiod 2.3设备上的400错误。什么可能是这个问题的原因? – dimetil
对于代理授权(如鱿鱼)使用此标题:
String credentials = proxyUsername + ":" + proxyPassword;
String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headers.put("Proxy-Authorization", auth);
- 1. 如何在Django中使用Spyne进行基本身份验证?
- 2. Authlogic - 通过基本HTTP身份验证进行身份验证
- 3. 使用webdriver在MS Edge上进行基本身份验证
- 4. 使用Android HTTP POST进行基本身份验证
- 5. 如何使用angularjs进行基本身份验证?
- 6. 如何使用RestClient进行基本身份验证?
- 7. 如何使用HttpWebRequest.Credentials属性进行基本身份验证?
- 8. 我如何使用Guzzle进行HTTP基本身份验证?
- 9. 如何使用角度2进行oAuth2基本身份验证?
- 10. 在Laravel中使用HTTP基本身份验证进行注册
- 11. 在DirectoryMatch中使用FilesMatch进行Apache基本身份验证
- 12. 在Solr中使用REST进行基本身份验证6.6.1
- 13. 使用PowerShell使用GitHub Api进行基本身份验证
- 14. 基本身份验证在Android
- 15. 基本身份验证改造+基本身份验证
- 16. 如何使Windows身份验证基于用户而不是本机进行身份验证?
- 17. 如何使用.Net Windows服务中的新基本身份验证向Visual Studio Team Services进行身份验证?
- 18. 如何使用ServiceStack进行基于令牌的身份验证
- 19. 如何使用HTTPS验证Woocommerce API(基本身份验证)
- 20. 使用Facebook和Google在Android上进行AWS身份验证
- 21. 如何在Rails应用程序中使用httparty进行基本身份验证?
- 22. 如何使用Oracle身份管理器进行身份验证?
- 23. 如何使用基本身份验证使用JQuery进行JSONP调用?
- 24. Rails:使用Authlogic进行基本身份验证
- 25. 使用Twitter和Facebook进行基本身份验证
- 26. 使用PhoneGap/Cordova进行基本身份验证FileTransfer
- 27. 使用StageWebView进行基本身份验证
- 28. 使用RestTemplate进行基本身份验证
- 29. 使用Shoes的下载()进行基本的HTTP身份验证
- 30. 使用Qt进行基本身份验证(QNetworkAccessManager)
谢谢你的回复。然而,这看起来像是一个非常常见的/基本的功能,我认为像volley这样的图书馆应该以一种更简单的方式实现它。我正在尝试这个库,它看起来很有前途(对一个好的缓存HTTP库真的很兴奋),但是我发现某些部分没什么意义:像我想要的解析部分(json,xml)。 ..)成为Listener的一部分,而不是Request,这样我就可以创建自己的基本请求,它会一直添加这些头文件。也许它应该是RequestQueue,它有一些默认选项(标题)...有一些想法。 – LocoMike
我不确定这是你想要做什么,但是你可以用getHeaders()方法来创建类似https://gist.github.com/alexmazza/5659606的东西。我在那里使用杰克逊,但你可以使用Gson或其他任何东西,然后总是使用该类作为你的认证请求的基类 – alex
是的,但如果我想获得一些JSON数据,以及后来的一些XML数据,我将不得不复制逻辑,或创建一个基类,它具有标题代码,然后我将不得不创建2个子类,并且我将无法使用默认的JsonRequest等等。对我来说,它看起来像响应和请求应该在不同的类(解析应该属于听众),以便你可以混合起来。继承问题! ;)无论如何感谢您的答复。 – LocoMike