상세 컨텐츠

본문 제목

코틀린 프로젝트08

JSP·자바·코틀린

by 김일국 2022. 3. 22. 14:48

본문

이번 포스트는

- 안드로이드 앱(클라이언트):  회원로그인 후 웹서버세션 대신에 토큰값을 저장하는 로직 구현

신규작업소스(스프링부트API): https://github.com/kimilguk/shop-api

신규작업소스(안드로이드앱): https://github.com/kimilguk/shop-app

- 안드로이드 앱에서 로그인 시 토큰정보를 저장하여 여러 액티비티에서 토큰인증이 필요한 스프링부트API로 토큰정보를 보낼 때 SharedPreferences 클래스객체(txt파일)에 저장된 토큰정보를 사용하는 코딩 추가

 

- 안드로이드 폰의 보안 때문에 예전 처럼 바로 확인 할 수 없다.(아래)

스마트폰에서 보안 때문에 run-as: Could not set capabilities: 퍼미션 오류가 나온다.(위)

- 위 스마트폰 보안 때문에 프로젝트 내용을 확인 하려면, 아래 처럼 ADB(Android Debug Bridge)백업 프로그램을 사용한다.

안드로이드 스마트폰의 패키지(프로젝트) 백업(위)

- ​위 명령어를 실행하면, 스마트폰에 아래 화면이 보인다. 데이터 백업 버튼을 클릭하면, 위 명령을 실행한 폴더에 data.ab 라는 Android Backup 파일이 생성된다.

위 에서 데이터 백업 버튼을 클릭하면 data.ab 파일이 생성된다.(위)

- 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?:"알수 없는 오류가 발생했습니다.")
    }
}

'JSP·자바·코틀린' 카테고리의 다른 글

코틀린 프로젝트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

관련글 더보기

댓글 영역