- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我在 Android 应用程序中使用带有 OkHttp 客户端的 Retrofit 2 (2.0.0-beta3),到目前为止一切顺利。但目前我正面临 OkHttp 拦截器的问题。我正在与之通信的服务器正在请求正文中获取访问 token ,因此当我拦截添加身份验证 token 的请求或在 Authenticator 的身份验证方法中,当我需要添加更新的身份验证 token 时,我需要为此修改请求正文.但看起来我只能在 header 中添加数据,而不能在正在进行的请求的正文中添加数据。目前我写的代码如下:
client.interceptors().add(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (UserPreferences.ACCESS_TOKEN != null) {
// need to add this access token in request body as encoded form field instead of header
request = request.newBuilder()
.header("access_token", UserPreferences.ACCESS_TOKEN))
.method(request.method(), request.body())
.build();
}
Response response = chain.proceed(request);
return response;
}
});
谁能指出我正确的方向,如如何修改请求正文以添加我的访问 token (第一次或在 token 刷新后更新)?任何指向正确方向的指针都将不胜感激。
最佳答案
我使用它来将 post 参数添加到现有的。
OkHttpClient client = new OkHttpClient.Builder()
.protocols(protocols)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request.Builder requestBuilder = request.newBuilder();
RequestBody formBody = new FormEncodingBuilder()
.add("email", "Jurassic@Park.com")
.add("tel", "90301171XX")
.build();
String postBodyString = Utils.bodyToString(request.body());
postBodyString += ((postBodyString.length() > 0) ? "&" : "") + Utils.bodyToString(formBody);
request = requestBuilder
.post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded;charset=UTF-8"), postBodyString))
.build();
return chain.proceed(request);
}
})
.build();
public static String bodyToString(final RequestBody request){
try {
final RequestBody copy = request;
final Buffer buffer = new Buffer();
if(copy != null)
copy.writeTo(buffer);
else
return "";
return buffer.readUtf8();
}
catch (final IOException e) {
return "did not work";
}
}
OkHttp3:
RequestBody formBody = new FormBody.Builder()
.add("email", "Jurassic@Park.com")
.add("tel", "90301171XX")
.build();
关于android - 改造2 : Modifying request body in OkHttp Interceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34791244/
我正在执行命令 ng g interceptor error 其中错误是拦截器的名称 但面临如下问题: An unhandled exception occurred: Schematic "inte
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《quarkus依赖注入》系列的第五篇
我在每个 Controller 代码(例如@UseInterceptors(ClassSerializerInterceptor))中都使用了,所以我决定将其设置为全局,并且尝试设置它时不走运。 我在
应用程序开发语言:ionic + Restangular 我在 Restangular 中有一个用于 BaseUrl 和 Auth Interceptor 的全局配置。[就像 http://app 一
在我的服务类中,我需要可用的 hibernate session 。我目前在 beans.xml 中这样做: com.app.dao.UserDao
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos 本篇概览 本
mybatis采用责任链模式,通过动态代理组织多个拦截器(插件),通过这些拦截器可以改变mybatis的默认行为(诸如sql重写之类的),由于插件会深入到mybatis的核心,因此在编写自己的插件前
下面给大家介绍mybatis interceptor 处理查询参数及查询结果,具体代码如下所示: ?
我一直在尝试实现应用程序范围的拦截器,但是,我一直看到以下错误: TypeError: this.interceptor.intercept is not a function 经过多次调试,我意识到
我有一个 HTTP 拦截器。后端 API 需要自定义 header ,其值在应用初始化和其他操作期间存储在 indexdb 中。因此,我需要获取值并在每个请求中传递它。但到目前为止,未能这样做,因为拦
我的 HibernateInterceptor 有问题。我延长了 EmptyInterceptor并覆盖 onFlushDirty方法。 我使用这种方法手动检查脏值(将以前的值与当前值进行比较)来为更
我在 Angular 5 中有一个有效的拦截器。它在 App.module 的提供者中注册,并正确拦截了从应用程序发出的所有请求。 问题是它不会拦截从应用程序使用的库发出的请求。 我正在使用开源库 (
我们已经实现了以下内容 function Inteceptors($httpProvider) { 'ng-inject'; $httpProvider.interceptors.pu
我需要拦截请求/响应,类似于 java 过滤器中的处理方式。在 Django 中执行此操作的最佳方法是什么?我只是要创建自己的中间件还是已经存在其他东西? 最佳答案 如果您需要拦截客户端请求/响应,请
目前,我们在 Jboss EAP 6.2 上使用 CXF 2.7.3 时遇到问题,并出现自定义 SoapFault 异常。 当我们发送自定义 SoapFault 时,不会显示子代码及其值: 这是我们想
CDI 中拦截器的范围是什么? aka,这合法吗?我会在每个调用拦截器的地方获得相同的拦截器实例吗? @RequestScoped public class SalesForceControllerI
我正在构建一个有 2 个拦截器的 angular 5 应用程序: 重试失败的 504 请求 另一个向用户显示有关失败请求的错误消息 我希望仅当错误不是 504 或错误为 504 并且已被第一个拦截器重
利用Spring MVC 的 Interceptor 实现个简易的性能监控,计算一下每个url的执行时间。 在 preHandle 方法中记录当前的时间戳到线程局部变量里,然后在afterComp
我想知道是否有办法在 Angular 的 HttpInterceptor 中检索当前路由。我正在使用来自不同路由的相同拦截器,但我需要检查是否正在从特定路由使用拦截器。如果是这样,我想在执行之前向后端
我创建了一个简单的拦截器来将用户重定向到登录页面,服务器返回 401 错误。但是它不起作用,因为状态被设置为 404,所以 $location 永远不会被调用。 .config( function m
我是一名优秀的程序员,十分优秀!