이번 포스트는
- 안드로이드 앱(클라이언트): 회원로그인 후 웹서버세션 대신에 토큰값을 저장하는 로직 구현
신규작업소스(스프링부트API): https://github.com/kimilguk/shop-api
신규작업소스(안드로이드앱): https://github.com/kimilguk/shop-app
- 안드로이드 앱에서 로그인 시 토큰정보를 저장하여 여러 액티비티에서 토큰인증이 필요한 스프링부트API로 토큰정보를 보낼 때 SharedPreferences 클래스객체(txt파일)에 저장된 토큰정보를 사용하는 코딩 추가
- 안드로이드 폰의 보안 때문에 예전 처럼 바로 확인 할 수 없다.(아래)
- 위 스마트폰 보안 때문에 프로젝트 내용을 확인 하려면, 아래 처럼 ADB(Android Debug Bridge)백업 프로그램을 사용한다.
- 위 명령어를 실행하면, 스마트폰에 아래 화면이 보인다. 데이터 백업 버튼을 클릭하면, 위 명령을 실행한 폴더에 data.ab 라는 Android Backup 파일이 생성된다.
- android backup 파일을 tar 압축파일로 변경하는 명령(아래)
- 위 abp 명령어는 https://sourceforge.net/projects/android-backup-processor/ 여기서 다운받아서 압축을 푼 후 android-backup-tookit\android-backup-processor\executable 폴더에서 abp.jar 파일을 복사해서 사용하면 된다.
(예전에는 abe.jar 파일이었다가 없어지고 abp.jar 로 변경 되었다.)
- data.tar 파일의 내용을 확인해 보면 sp (SharedPreferences)폴더에 토큰이 저장된 파일이 생성된 것을 확인 할 수 있다.
- 위 토큰 파일내용 일부(아럐)
- 안드로이드 앱 실행 시 SharedPreferences 객체 파일 생성 구문(아래)
/**
* SharedPreferences 파일저장 클래스로 싱클톤 객체로 사용한다.
*/
object Prefs {
private const val TOKEN = "token"//const=static속성, val=final속성
private const val REFRESH_TOKEN = "refresh_token"
private const val USER_NAME = "user_name"
private const val USER_ID = "user_id"
val prefs by lazy {//lateinit 처럼 초기화 지연(val 전용,사용시 초기화 할 수 있다.)
//SharedPreferences 객체를 앱 진입시(App.instance) 생성한다.
PreferenceManager.getDefaultSharedPreferences(App.instance)
}
var token
get() = prefs.getString(TOKEN, null)
set(value) = prefs.edit()
.putString(TOKEN, value)
.apply()
var refreshtoken
get() = prefs.getString(REFRESH_TOKEN, null)
set(value) = prefs.edit()
.putString(REFRESH_TOKEN, value)
.apply()
var userName
get() = prefs.getString(USER_NAME, null)
set(value) = prefs.edit()
.putString(USER_NAME, value)
.apply()
var userId
get() = prefs.getLong(USER_ID, 0)
set(value) = prefs.edit()
.putLong(USER_ID, value)
.apply()
}
- 안드로이드 앱에서 로그인 후 응답받은 토큰을 SharedPreferences 객체로 저장하는 코딩(아래)
private fun onSigninResponse(response: ApiResponse<SigninResponseVO>) {
//TODO("로그인 성공 후 처리")
if(response.success && response.data != null) {
//response.data 토큰값이 있을때 저장로직(아래)
Prefs.token = response.data.token
Prefs.refreshtoken = response.data.refreshToken
Prefs.userName = response.data.userName
Prefs.userId = response.data.userId
toast("로그인 되었습니다.")
} else {
toast(response.message?:"알수 없는 오류가 발생했습니다.")
}
}
코틀린 프로젝트10 (0) | 2022.03.29 |
---|---|
코틀린 프로젝트09 (0) | 2022.03.28 |
코틀린 프로젝트07 (0) | 2022.03.21 |
코틀린 프로젝트06 (0) | 2022.03.18 |
코틀린 프로젝트05 (0) | 2022.03.17 |
댓글 영역