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

改装2授权如何为访问令牌使用侦听器类

白青青
2023-03-14

我试图在登录时获取令牌,然后在Main active中显示昵称。但是Main活动中的昵称始终为空值。我不确定如何从Interceptor类调用Main active。

BasicAuthInterceptor类:我尝试连接这个类和main类。但它没有起作用。(当我在main类中进行调试时,昵称值始终为null)

public class BasicAuthInterceptor implements Interceptor {
    private String token;

    public BasicAuthInterceptor(String token){
        this.token = token;
    }

    @NotNull
    @Override
    public Response intercept(@NotNull Chain chain) throws IOException {
        String token = UserPreference.getInstance().getString(Config.KEY_TOKEN);
        Request request = chain.request();
        Request authenticatedRequest = request.newBuilder()
                .header("authorization",token)
                .build();
        return chain.proceed(authenticatedRequest);
    }
  • 改装等级
public class RetrofitClient {
    public static RetrofitInterface buildHTTPClient() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("myurl")
                .addConverterFactory(GsonConverterFactory.create())
                .client(getClient())
                .build();

        return retrofit.create(RetrofitInterface.class);
    }

   private static OkHttpClient getClient() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        return new OkHttpClient.Builder()
                .addInterceptor(new BasicAuthInterceptor(Config.KEY_TOKEN))
                .build();
    }

    private static HttpLoggingInterceptor provideHttpLoggingInterceptor() {
        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(@NotNull String message) {
                Log.d("HTTP", message);
            }
        });
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        return httpLoggingInterceptor;
    }

    public static RetrofitInterface getRestMethods() {
        return buildHTTPClient();
    }
  • RetrofitInterface接口:当我在Main活动中获得令牌时,我无法添加Header值
public interface RetrofitInterface {

    @FormUrlEncoded
    @POST("v1/user/regist")
    Call<UserRegisterData> regist(@Field("email") String email, @Field("nickname") String nickname, @Field("password") String password);

    @FormUrlEncoded
    @POST("v1/user/login")
    Call<ApiResultDto> login(@Field("email") String email, @Field("password") String password);


   // @Header("key : authorization","token")

    @GET("v1/user/account")
    Call<UserAccountData> account(@Header("authorization") String token);
}
  • 主活动:登录后获取令牌和用户信息
 public void initPreference() {
        userPreference = new UserPreference();
        userPreference.setContext(this);
    }

    public void userLogOut(View view) {
        userPreference.setLoggedIn(getApplicationContext(), false);
        Intent intent = new Intent(MainActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
    }

    @Override
    public void onClick(View view) {
        userLogOut(view);
    }

    private void getUser() {
         getToken = userPreference.getString(Config.KEY_TOKEN);
        RetrofitInterface retrofitInterface = RetrofitClient.getRestMethods();
        Call<UserAccountData> call = retrofitInterface.account(getToken);

        call.enqueue(new Callback<UserAccountData>() {

            public void onResponse(Call<UserAccountData> call, Response<UserAccountData> response) {
                if (response.isSuccessful()) {
                    String nickName =response.body().getNickname();
                    getNickName.setText(nickName);

                    Toast.makeText(getApplicationContext(), "token success", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<UserAccountData> call, Throwable t) {
                Toast.makeText(getApplication(), "token fail", Toast.LENGTH_SHORT).show();
            }
        });
    }

共有1个答案

羊舌炯
2023-03-14

您需要将it添加到okhttp客户端

 private static OkHttpClient getClient() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        return new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
               ---> .addInterceptor(BasicAuthInterceptor("YOUR TOKEN"))
                .build();
    }
 类似资料:
  • 我目前正在学习OAuth 2.0和OpenID Connect,我对授权服务器和访问令牌有疑问。规范将授权服务器定义为: 服务器在成功验证资源所有者并获得授权后向客户端发放访问令牌。 因此,据我所知,客户端将用户重定向到授权服务器,用户在授权服务器上进行身份验证,授权服务器向客户端发出访问令牌。 现在有一件事发生了,直到现在我才明白。有两种可能的方法来理解这一点,我正在努力找到正确的方法: > 授

  • 我是JavaFX新手,已经开始转换用Swing编写的定制组件。作为最佳实践,我总是检查事件侦听器(PropertyChangeListener、MouseListener、ActionListener等)是否。)已经包含在目标对象的侦听器中,以确保同一个侦听器不会被添加两次。我试图用JavaFX做同样的事情,但是找不到任何访问侦听器列表的方法(例如,运行list.contains(listener

  • 我正在尝试使用,我想将添加到我的像这样: 但下面的不起作用: 我的服务器是asp。net webApi。请帮忙,我该怎么办?

  • 如何确定Authorization: Bearer中使用的JWT令牌...是访问令牌或刷新令牌。换句话说,是什么阻止用户在授权头中使用他的JWT刷新令牌而不是访问令牌。 当我在本指南https://github . com/starkandwayne/ultimate-guide-to-uaa/blob/master/docs/refresh-tokens . MD # jwt-refresh-t

  • 我遇到了使用文档签名 API 的第一个障碍,需要一些帮助。 我将docusignrestapi集合导入到Postman中。我设置了iKey、iSec、encodedKeys和codeFromUrl变量。 当尝试发送'01-授权代码授予访问令牌'post API时,我每次都得到以下响应。 我尝试从Postman中删除所有内容,包括环境,并从DocuSign中删除该应用程序,然后重新开始,以便我的所有

  • 我有一个具有 oauth2.0 授权授权类型身份验证的 api,其中包含以下步骤 - 获取授权代码的方法,该方法在浏览器中打开需要输入凭据的表单。这将导致一系列后重定向请求,并最终在第三个后响应头中返回授权代码 现在,在主体中发送了一个post请求,其中包含授权类型的授权代码,该授权代码包含客户端凭据和我们从get请求中获得的上述授权代码,并返回访问令牌 这就是邮递员的工作原理。如何使用Rest