- Vue 에서 로그아웃 버튼을 누르면 userStore의 action으로 dispatch
- dispatch된 logout action에서 post : /api/logout으로 Springboot 요청
- Spring Security에 지정된 로그아웃 Url로 요청이 들어오면 아래 내용의 작업을 수행한다. (WebSecurityConfig)
- Springboot에서 logout-action으로 응답이 오면 userStore에 있는 state를 초기화 시키는 mutations를 실행
- 로그인 화면으로 되돌아간다.
(Vue) userStore의 state값을 하나하나 초기화 시켰다..
mutations: {
resetState: function (state){
state.email = '';
state.token = '';
state.nickName = '';
state.firstName = '';
state.lastName = '';
state.mid = '';
}
}
(Springboot) WebSecurityConfig
logout()
.logoutUrl("/api/logout")
.logoutSuccessUrl("/")
.logoutSuccessHandler(customLogoutSuccessHandler)
.invalidateHttpSession(true).deleteCookies("cookie")
.and()
...
- logoutUrl(logoutUrl) : 로그아웃을 요청할 경로이고 기본값은 /logout이다. 사용자가 원하는 경로를 지정할 수 있으며 기본적으로 POST method로 요청할 수 있다
- logoutSuccessUrl(logoutSuccessUrl) : 로그아웃이 처리된 후 이동될 경로이고 기본값은 /login?logout이다. 사용자가 임의로 지정할 수있다.
- successHandlerRef(logoutSuccessHandler) : 로그아웃 후 처리될 내용을 담은 클래스를 지정할 수있다. Handler가 지정되면 logout-success-url 값으 무시된다.
- invalidateSession(invalidateHttpSession) : 로그아웃 시 세션정보를 제거할 지 여부를 지정한다. 기본값은 TRUE이고 세션정보를 제거한다.
- deleteCookies(deleteDookies) : 로그아웃 시 제거할 쿠키이름을 지정한다.
출처: https://baejangho.com/entry/Spring-Security-Logout
위 방법으로 임시 로그아웃을 구현했다.
로그아웃을 해도 따로 토큰을 만료시키지 않는다. (jwt 토큰 특성상 한번 발급된 토큰은 만료시키기 힘들다고 한다)
따라서 로그아웃 처리시 아래의 작업을 수행하는 필터를 만들어야 한다.
- 토큰이 유효한지 확인 (토큰의 기간이 만료되지 않았는가?)
- 해당 토큰을 블랙리스트(DB)에 추가시킨다. (특정 토큰을 선택해서 만료시키기 힘들다고 한다)
- 블랙리스트(DB) 토큰의 유효기간이 지나면 삭제되게 한다.(event? 자동데이터 삭제?)
그리고 인증 절차에 블랙리스트에 등록된 토큰값인지 검사하는 부분을 만들어야 한다.
'Vue > Vue' 카테고리의 다른 글
로그아웃 3 (Springboot + Vue) (0) | 2022.01.25 |
---|---|
로그아웃 2 (Springboot + Vue) (0) | 2022.01.23 |
조회수 중복 방지-cookie (Springboot + Vue) (0) | 2022.01.18 |
글 수정 & 삭제 2 (Springboot + Vue) (0) | 2022.01.15 |
글 수정 1 (springboot - vue) (0) | 2022.01.14 |