๐ฐ ์ต๋ช
์ปค๋ฎค๋ํฐ ํ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ค. ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ ๊ตฌํ์ ๋งก์๋ค.
๋ก๊ทธ์์ ๊ตฌํํ ๋ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ๊ต์ฅํ ๋ง์๋ค. ๊ทธ ์ค ๋๋ถ๋ถ์ด ๋ ๋์ค๋ฅผ ์ด์ฉํด ๊ตฌํ์ ํ๋๋ฐ ์ ํ์๋ถ์ด ๋ธ๋๋ฆฌ์คํธ๋ง์ ์จ์ ๊ตฌํ์ ์ฑ๊ณตํ์
์ ์ฐธ๊ณ ํด์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด์๋ค.
๋ฐฑ ๋ถ๋ถ์์๋ ์ ๊ตฌํ์ด ๋์๋๋ฐ ํ๋ก ํธ๋ ์ฐ๊ฒฐํ๋๊ฒ ์ด๋ ค์ ๋ค. ๋ ํผ์ํ๋ ํ๋ก์ ํธ๋ ์๋ ๋ฟ๋๋ฌ ์๊ฐ์ด ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ๋ฒ๋ฆฌ๊ณ ๋ฐฐ์ด ๋ด์ฉ์ผ๋ก ๋ค์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค. ๋๋ฌธ์ ๋๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ๋ชปํด๋ค.
๊ทธ๋๋ ์๋ ์๊ฐ ์ชผ๊ฐ๊ฐ๋ฉด์ console๊ณผ log๋ฅผ ํ๋ ํ๋ ์ฐ์ด๊ฐ๋ฉฐ ์คํํ ๊ฒฐ๊ณผ ์ด์ ๋ฅผ ์์๋๋ค.
function logout() {
const jwtToken = getJwtFromCookie();
console.log(jwtToken)
// AJAX๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ๋ก๊ทธ์์ ์์ฒญ์ ๋ณด๋
๋๋ค.
$.ajax({
type: "POST",
url: "/api/logout",
headers: {
'Authorization': jwtToken,
},
success: function (response, textStatus) {
alert('๋ก๊ทธ์์ ๋์์ต๋๋ค.');
console.log(textStatus)
window.location.href = "/";
deleteJwtCookie();
},
error: function (jqXHR, textStatus, errorThrown) {
// ๋ก๊ทธ์์ ์คํจ ์ ์ฒ๋ฆฌ
alert("๋ก๊ทธ์์ ์คํจ");
}
});
// window.location.href = "/";
// deleteJwtCookie();
}
console์ ์ฐํ๋ jwtToken์ Bearer%20eyJhbG.. (์๋ต) ์ด์๋ค.
์๋ฒ๋ก ์ ๋์ด์ค๋ ๊ฒ๋ ํ์ธํ๋ค.
ํ์ง๋ง controller ์์ "Bearer " ๊ณต๋ฐฑ ์ดํ์ ํ ํฐ๊ฐ(ey...)๋ง log์ ๋ํ๋์ผ ํ๋๋ฐ ์ค์ ์ฐํ ํ ํฐ์ 20eyJhbGciOiJI... (์๋ต) ๊ณต๋ฐฑ์ ํ์ํ๋ ์ซ์๋ ํ์๊ฐ ๋์ด ์์๋ค.
๋๋ฌธ์ ํ ํฐ ๊ฒ์ฆ์์ ์กํ null ๊ฐ์ ๋ฐํํด ํ ํฐ์ด ๋ธ๋๋ฆฌ์คํธ์ ์ ์ฅ์ด ๋์ง ์์๋ ๊ฑฐ์๋ค. ์๋ ์ฝ๋์์ substring(7)์ 9๋ก ๋ฐ๊ฟ์คฌ๋๋ ๋ธ๋๋ฆฌ์คํธ์ ์ ์ ์ฅ์ด ๋๋๊ฑธ ํ์ธํ๋ค.
public String resolveToken(HttpServletRequest request) {
String bearerToken = request.getHeader(AUTHORIZATION_HEADER);
log.info("bearerToken : " + bearerToken);
if (StringUtils.hasText(bearerToken)&& bearerToken.startsWith("Bearer")) {
return bearerToken.substring(7);
}
return null;
}
๐ฐ ๋น๋ก ํ๋ก์ ํธ์๋ ๋ธ๋๋ฆฌ์คํธ๋ก ๊ตฌํํ ๋ก๊ทธ์์์ด ๋ค์ด๊ฐ์ง ๋ชปํ์ง๋ง ์ด์์ ์์ธ์ ์์๋๊ณ ์ ๋ก๊ทธ์์์ด ๋๋ ๊ฒ๋ ํ์ธ์ด ๋์ด์ ๊ธฐ๋ถ ์ข๊ฒ ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ ์ ์์๋ค.
์ข์ ์ ๋ณด ์ป์ด๊ฐ๋๋ค, ๊ฐ์ฌํฉ๋๋ค.