android--OkHttp3을 통해 Token 차단 실효

2476 단어 android
전체 프로세스:
1. 인터페이스 요청: 예컨대test
2.test의 http code 차단하기: 401이면 차단하고 RefreshToken을 통해 최신accesstoken 및refreshtoken,
3. Request를 통해 요청을 다시 터치하고 테스트 인터페이스를 요청합니다
 
말을 많이 하지 않고 바로 코드를 붙이다
    okHttpBuilder
OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder();
okHttpBuilder.readTimeout(30, TimeUnit.SECONDS)
        .writeTimeout(30, TimeUnit.SECONDS)
        .connectTimeout(30, TimeUnit.SECONDS);

사용자 정의 token 차단기:
public class TokenInterceptor implements Interceptor {

    @Override
    public Response intercept(@NonNull Chain chain) throws IOException {
        Request request = chain.request();
        request.newBuilder().header("accessToken", PreferencesUtil.getInstance().getString(PreferencesUtil.Name.ACCESS_TOKEN));
        Response response = chain.proceed(request);
        int responseCode = response.code();
        if (responseCode == ErrorCode.ERR_CODE_401) {
            String refreshToken = PreferencesUtil.getInstance().getString(PreferencesUtil.Name.REFRESH_TOKEN);
            Call call = ApiRequest.getHttpApi().getToken(Constant.WX_APP_ID, refreshToken);
            retrofit2.Response execute = call.execute();
            if (execute.isSuccessful()) {
                RefreshTokenResponse refreshTokenResponse = execute.body();
                if (refreshTokenResponse.code == ErrorCode.SUCCESS) {
                    PreferencesUtil.getInstance().putString(PreferencesUtil.Name.REFRESH_TOKEN, refreshTokenResponse.data.refreshToken);
                    PreferencesUtil.getInstance().putString(PreferencesUtil.Name.ACCESS_TOKEN, refreshTokenResponse.data.accessToken);
                    Request newRequest = request.newBuilder()
                            .header("accessToken", PreferencesUtil.getInstance().getString(PreferencesUtil.Name.ACCESS_TOKEN))
                            .build();
                    response.body().close();
                    return chain.proceed(newRequest);
                } else {
                    failed();
                }
            } else {
                failed();
            }
        }
        return response;
    }

    private void failed() {
        //      ,do something
    }
}

마지막으로 okHttp Builder.addInterceptors(new TokenInterceptor) - 차단을 추가합니다.
주의해야 할 점은accessToken은 반드시 헤더에 넣어야 한다는 것이다.

좋은 웹페이지 즐겨찾기