-
[Android/kotiln] jwt 토큰 임시 저장, shared preference, OkHttp3 Interceptor 사용법Android/kotlin 2022. 6. 21. 02:07
Android에서 JWT 사용과정
1. 사용자가 아이디, 비밀번호를 통해 로그인
2. 서버에서 토큰을 발급받아 response로 받는다
3. 그 토큰을 Shared Preference를 사용하여 저장
4. 서버에 요청할 때 저장소의 토큰을 header에 넣어 요청
Shared Preference
- 간단한 값을 저장할 때 주로 사용하는 저장소
- 예) 토큰, 초기 설정 값 등
사용법
1. PreferenceUtil 파일만들기
class PreferenceUtil(context: Context) { private val prefs: SharedPreferences = context.getSharedPreferences("prefs_name", Context.MODE_PRIVATE) var token:String? get() = prefs.getString("token",null) set(value){ prefs.edit().putString("token",value).apply() } }
get, set메소드를 통해 token을 관리할 수 있다.
2. App 파일 만들기
class App : Application() { companion object { lateinit var prefs: PreferenceUtil } override fun onCreate() { prefs = PreferenceUtil(applicationContext) super.onCreate() } }
3. AndroidManifest.xml에 App설정
<application android:name="com.example.demo.App" ... </application>
4. 토큰을 저장하고 가져오기
1) token 저장
App.prefs.token=token
2) token 사용
val token = App.prefs.token
5. header 작성
1) apiService에서 header부분
//유저정보조회 @GET("users") fun get_user(@Header("Authorization")token:String):Call<userGetBody>
2) 서버에 get요청
var tests = apiService.get_user(App.prefs.token)
get함수에 token을 넣어 서버에 요청한다.
서버 오류가 발생하면 다음과 같이 수정해서 해결해보자
var tests = apiService.get_user("Bearer "+App.preps.token)
OkHttp3 Intercepter
위와 같이 @Header 어노테이션을 이용하여 헤더를 추가할 수 있지만 메서드가 많아지면 힘들어진다.
따라서 모든 REST API요청에 헤더를 추가하기 위해서 OkHttp interceptor를 이용해보자
사용법
1. AuthInterceptor 파일 생성
class AuthInterceptor : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { var req = chain.request().newBuilder().addHeader("Authorization", "Bearer "+ App.prefs.token).build() return chain.proceed(req) } }
2. OkHttpClient 객체 생성
val okHttpClient = OkHttpClient.Builder().addInterceptor(AuthInterceptor()).build()
3. retrofit client부분 추가
var retrofit = Retrofit.Builder() .client(okHttpClient) .baseUrl(ApiService.API_URL) .addConverterFactory(GsonConverterFactory.create()).build() var apiService = retrofit.create(ApiService::class.java)
출처
https://leveloper.tistory.com/133?category=762053
https://kimch3617.tistory.com/10
'Android > kotlin' 카테고리의 다른 글
[Android/ kotlin] STOMP 를 이용한 실시간 양방향 채팅 기능 구현 (0) 2023.02.16 [android/kotlin] recyclerview item clicklistener (0) 2022.08.28 [Android/kotlin] Bundle 사용법, Fragment와 Fragment 사이 데이터 전달, Fragment 전환 (0) 2022.08.24 [Android / kotlin] Retrofit으로 LocalDateTime형식 데이터 주고받기 (0) 2022.07.17