Android📱
[Android] Retrofit2 사용 시 헤더에 데이터 넣기!
아무루
2022. 10. 17. 23:30
안드로이드에서 OAuth 2.0 인증 절차를 진행할 때
okhttp 헤더에 토큰을 추가해서 인증을 진행하는 경우가 많이 있다.
나도 프로젝트를 진행하면 보통 서버 측과 JWT를 이용해서 인증을 하고 요청에 대한 응답을 받게 되는 구성으로 프로젝트를 진행하였다.
그때 보통 두 개의 방식이 있는데
retrofit2 요청 시 @Header 어노테이션 사용하기
import retrofit2.http.GET
interface ItemApi {
@GET("/item")
fun getItemList(
@Header("accessToken") accessToken: String?,
): List<Item>
}
가장 기본 적인 방식은 이 방식이다.
직접 헤더 어노테이션을 써서 토큰을 추가해주는 방식이다.
만약 헤더마다 다른 데이터를 추가해야 하거나
양이 많지 않을 때는 간단하게 사용하기 좋은 방식이라고 생각된다.
하지만 토큰은 보통 요청을 할 때 매번 들어가게 되고,
이 작업을 일일이 다 해주다 보면 실수를 할 확률도 있고,
많은 노동이 들게 된다.
그래서 사용하는 방법이
interceptor이다
interceptor를 이용해서 헤더 추가하기
import com.example.home_rent_app.data.repository.token.TokenRepository
import com.example.home_rent_app.data.session.AppSession
import kotlinx.coroutines.Dispatchers
import okhttp3.Interceptor
import okhttp3.Request
import okhttp3.Response
import okhttp3.Route
class AuthInterceptor : Interceptor, Authenticator {
override fun intercept(chain: Interceptor.Chain): Response {
val requestBuilder = chain.request()
.newBuilder()
requestBuilder.addHeader(
"access-token",
it.accessToken.tokenCode
)
return chain.proceed(requestBuilder.build())
}
}
이 방식은 okhttp3에 Interceptor라는 인터페이스를 구현하고,
okhttp 클라이언트를 만들 때 추가해주면 자동으로 원하는 내용을 헤더에 추가해주는 방법이다.
Builder를 통해서 okhttp 클라이언트를 만들때
.addInterceptor(authInterceptor)
를 이용해서 추가해주면 요청을 보낼 때 자동으로 원하는 내용이 헤더에 추가되게 된다.
그러면 하나하나 @Header를 사용해서 넣지 않아도 일괄적으로 같은 데이터를 넣을 수 있고,
코드를 조금 더 손보면 원하는 내용을 변경하거나, 다른 동작들도 가능하다!