当前位置: 首页 > 知识库问答 >
问题:

向OkHttp添加JWT身份验证令牌,Dagger2&改版

衡玄裳
2023-03-14

跟随后匕首+改装。在运行时添加身份验证头我试图配置okHttp并通过添加拦截器将jwt身份验证密钥添加到okHttp中,为此我创建了单独的拦截器并将其添加到Dagger的组件中,以便它可以在任何地方公开。

@Provides
    @Singleton
    OkHttpClient provideOkhttpClient(Cache cache) {
        OkHttpClient.Builder client = new OkHttpClient.Builder();
        client.addInterceptor(provideHeaderInterceptor());
        client.cache(cache);
        return client.build();
    }


    @Provides
    @Singleton
    Retrofit provideRetrofit(OkHttpClient okHttpClient) {
        return new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(mBaseUrl)
                .client(okHttpClient)
                .build();
    }

    @Provides
    @Singleton
    JwtAuthenticationInterceptor provideHeaderInterceptor(){
        return new JwtAuthenticationInterceptor();
    }

组件

@Component(modules = {AppModule.class, ApiModule.class, StorageModule.class})
@Singleton
public interface NetComponent {
    Retrofit retrofit();
    OkHttpClient okHttpClient();
    SharedPreferences sharedPreferences();
    Gson gson();
    Cache cache();
    KRITILog log();
    JwtAuthenticationInterceptor headerInterceptor();
}

JWTauthenticationInterceptor.java

@Singleton
public class JwtAuthenticationInterceptor implements Interceptor {
    private String jwtToken;

    @Inject
    public JwtAuthenticationInterceptor() { }

    public void setJwtToken(String jwtToken) {
        this.jwtToken = jwtToken;
    }

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();

        Request.Builder builder = original.newBuilder()
                .header("Authorization","Bearer " +jwtToken);
                        //String.format("Bearer %s", jwtToken));

        Request request = builder.build();
        return chain.proceed(request);
    }
}

共有1个答案

谷隐水
2023-03-14

问题是这条线

client.addInterceptor(provideHeaderInterceptor());

在这里,您正在创建jWTauthenticationInterceptor的一个新实例,与Dagger提供的实例不同。jWTauthenticationInterceptor应该是该方法的依赖项。例如

@Provides
@Singleton
OkHttpClient provideOkhttpClient(Cache cache, JwtAuthenticationInterceptor interceptor) {
    OkHttpClient.Builder client = new OkHttpClient.Builder();
    client.addInterceptor(interceptor);
    client.cache(cache);
    return client.build();
}
 类似资料:
  • 我在做一个全堆栈的web应用程序。我的前端由angular-cli组成,后端由node+Express构建。

  • 本文向大家介绍Angular之jwt令牌身份验证的实现,包括了Angular之jwt令牌身份验证的实现的使用技巧和注意事项,需要的朋友参考一下 Angular之jwt令牌身份验证 demo https://gitee.com/powersky/jwt 介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该toke

  • 我试图用PHP为两个主题相连的领域创建一个简单的SSO系统。 因此,我想知道是否可以将包含用户用户名的签名JWT令牌从域a存储到本地存储。然后使用来自域B的相同密钥来验证JWT,这将导致成功的身份验证。 我在谷歌搜索了一些答案,我发现其中一些包含了一个中间认证域,它将负责认证。但我只想把我有的两个域联系起来。 谢了。

  • 我有一个Rest Spring BootAPI,当用户验证API返回令牌jwt时,我在浏览器中注意到该令牌出现在响应头中 如何通过Reactjs将此令牌存储在本地存储浏览器中? 我的请求代码如下所示:

  • 我有一个LaravelAPI(实际上是LumenAPI)服务于VueJS前端。Vue应用程序允许用户登录到谷歌。然后将Google令牌发送回Lumen API,后者使用Google验证令牌,然后验证电子邮件地址是否为有效用户。然后它生成一个令牌,与用户一起存储在数据库中,并返回用户对象。 我没有使用Passport或jwt auth之类的东西。那么现在,我如何使用默认的Auth中间件来验证(现在已