๋ฒ ์ด์ง๋ฐ
์ธ์ฆ์ธ๊ฐ
12/13 14:00 ~ 15:40 (์ฝ 1์๊ฐ 40๋ถ ์งํ)
์ค์ ํค์๋
- ์ฟ ํค
- ์ฟ ํค ์ธ์ฆ ๋ฐฉ์
- ์ธ์
- ์ธ์ ์ธ์ฆ ๋ฐฉ์
- ํ ํฐ
- ํ ํฐ ์ธ์ฆ ๋ฐฉ์
- ํํฐ
์ฟ ํค, ์ธ์
, ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ๊ฐ๋ฐ์ ํ๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ์๊ณ ์์ด์ผ ํ๋ ๋ด์ฉ์ด๋ค!
์ธ์ฆ ๋ฐฉ์์ ๋น๊ตํด๋ณด๋ ๊ฒ์ด ์ข ๋ ์ดํด๊ฐ ์ฝ๋ค.
์ฟ ํค ์ธ์ฆ ๋ฐฉ์
์ฟ ํค
- ๋ธ๋ผ์ฐ์ ๋ฅผ ์ ์ํ์ ๋, ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด์๋ ์ฌ์ฉ๋๋ค.
- ์ฌ์ฉ์์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ์ ์์ ๊ณต๊ฐ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ ๊ณต๊ฐ์ด ํ์ํ ๊น?!
์ฌ์ฉ์ฑ
- ๊ฐ์ธํ๋ ๊ฒฝํ ์ ๊ณต → ๋ง์ถคํ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
- ์ฑ๋ฅ ์ต์ ํ → ๋ธ๋ผ์ฐ์ , ์ฟ ํค์์ ๋ฐ๋ก ๊บผ๋ด์ ๋ณด์ฌ์ค ์ ์๋ค.
- ์คํ๋ผ์ธ ์ง์
์ฟ ํค๋ฅผ ํ์ฉํ ๊ธฐ๋ฅ
๋ธ๋ผ์ฐ์ ์์ ์์ฒญ์ด ๊ฐ ๋๋ง๋ค ์๋์ผ๋ก Request Header์ ๊ทธ ๊ฐ๋ค์ด ํฌํจ๋์ด์ ์๋ฒ๋ก ๋ ์๊ฐ๋ค.
๋ณ๋์ ์ค์ ์์ด๋ ๊ฐ๋ฅํ๋ค!
์ฟ ํค ์ธ์ฆ ๋ฐฉ์
โญ ์๋ฌ ์ถ์ ๋ฒ์๋ฅผ ์ขํ๋ ๊ฟํ!
๋ก๊ทธ๋ฅผ ์ฐ์ด๊ฐ๋ฉด์ ๋ฒ์๋ฅผ ์ค์ฌ๋๊ฐ๋ค!!
@Slf4j๋ฅผ ์ฌ์ฉํด์ lod.info๋ฅผ ํ์ฉํด ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ฉด์ ์ด๋์ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง ์ค์ฌ๋๊ฐ ์ ์๋ค.
์ฟ ํค ์ค์ต ์ฝ๋
@GetMapping("/cookie")
public String cookieAPI(HttpServletRequest request) {
log.info("::: AuthController.cookieAPI()");
// 1. Request ๊ฐ์ฒด์์ cookie ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
Cookie[] cookies = request.getCookies();
// 2. ์ฟ ํค (UserId) ํค๊ฐ์ผ๋ก value ์ฐพ๋ ํจ์ ํธ์ถ
String userId = this.findCookie("userId", cookies);
// 3. ์ฐพ์์จ ์ฟ ํค์ ๊ฐ ์ถ๋ ฅ
if (userId != null) {
log.info("found userId: {}", userId);
} else {
log.info("userId not found");
}
return "success";
}
@GetMapping("/cookie-login")
public ResponseEntity<String> cookieLoginAPI() {
log.info("::: AuthController.cookieLoginAPI()");
// 1. ๋ก๊ทธ์ธ ๋ก์ง ์ฒ๋ฆฌ => DB ์กฐํํด์ ์ ์ ์ฐพ๊ธฐ
String cookieKey = "userId";
String userId = "1";
// 2. ์์ฑ - ํค๋ ์์ฑ
String headerValue = cookieKey + "=" + userId;
HttpHeaders headers = new HttpHeaders();
headers.set("Set-Cookie", headerValue);
// 3. ์๋ต ๋ฐํ
return new ResponseEntity<>("๋ก๊ทธ์ธ ์ฑ๊ณต", headers, HttpStatus.OK);
}
private String findCookie(String key, Cookie[] cookies) {
if (cookies != null ) {
for (Cookie cookie : cookies) {
if (key.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
์ฟ ํค ์ธ์ฆ ๋ฐฉ์์ ํ๊ณ
์ฌ๊ธฐ์ ๋ง์ฝ.. ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด๊ฐ ํ์ทจ๋๋ค๋ฉด?!
- ๊ทธ๋์ ์ฟ ํค์๋ ์ ์ถ๋๋ฉด ์๋๋ ์ ๋ณด๊ฐ ์ ์ฅ๋๋ฉด ์๋๋ค.
์ธ์ ์ธ์ฆ ๋ฐฉ์
์ธ์
- ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ฐ๊ฒฐ์ ๋ํ๋ด๋ ํ๋์ ์ํ์ด๋ค.
- ํ๋์ ์ฐ๊ฒฐ ์ํ์ด๋ค.
์ธ์ ์ธ์ฆ ๋ฐฉ์
- [ ํด๋ผ์ด์ธํธ ] ์ธ์ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค.
- [ ์๋ฒ ] ์ธ์ ์ ๋ณด๋ฅผ ๋ฐ๋๋ค.
- [ ์๋ฒ ] ์ธ์ ์ ๋ณด๋ฅผ ์ธ์ ์ ์ฅ์๋ฅผ ํตํด์ ์กฐํํ๋ค.
- [ ์๋ฒ ] ์ธ์ ์ ์ฅ์์ ์ธ์ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ธ์ฆ๋ ์ ์ ์ด๋ค.
- [ ์๋ฒ ] ์ธ์ ์ ์ฅ์์ ์ธ์ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ธ์ฆ๋์ง ์์ ์ ์ ์ด๋ค.
์ธ์
์ ์ํธํ๊ฐ ์๋๋ค!!!
์ธ์
์ ์ฅ์์์ ์ฃผ๊ธฐ์ ์ผ๋ก key ๊ฐ์ ๋ฐ๊ฟ์ค๋ค๋ฉด ํจ์ฌ ์์ ํด์ง๋ค.
์๋ฒ ์ชฝ๋ง ์
๋ฐ์ดํธ ํ๋ฉด ๋๋ค. ์๋ฒ์์๋ ์ ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ๋๋๋ผ๋ ์์ฒญ์ด ์์ ๋ ์ ์ ์๋ค.
ํด์ปค๊ฐ ๊ฐ์ ๊ฐ์ ธ๊ฐ๋๋ผ๋ ์
๋ฐ์ดํธ๋๋ฉด ๊ทธ ์ ์ ๊ฐ์ ธ๊ฐ ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์๋ฒ์์ ์ ์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฑ
์์ด ์๋ฒ์๊ฒ ์๋ค.
ํ๋ฆ๋
์ค์ต
// ์ธ์
์ ์ฅ์
private final Map<String, String> sessionStorage = new HashMap<>();
@GetMapping("/session")
public String sessionAPI(HttpServletRequest request) {
log.info("::: AuthController.sessionAPI()");
Cookie[] cookies = request.getCookies();
String sessionId = this.findCookie("sessionId", cookies);
if (sessionId != null) {
// ์ธ์
์ ์ฅ์์์ ์ ์ ๋ฐ์ดํฐ ์กฐํ & ํ์ฉ
String userData = sessionStorage.get(sessionId);
log.info("found session: {}", userData);
} else {
log.info("session not found");
}
return "success";
}
@GetMapping("/session-login")
public ResponseEntity<String> sessionLoginAPI() {
log.info("::: AuthController.sessionLogin()");
// 1. ๋ก๊ทธ์ธ ๋ก์ง ์ฒ๋ฆฌ
// 2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
String sessionId = "xxxx";
String sessionData = "userId: 1";
// 3. ์ธ์
์ ์ฅ์์ ๋ฐ์ดํฐ ์ ์ฅ
sessionStorage.put(sessionId, sessionData);
// 4. ์์ฑ - ํค๋ ์์ฑ
String headerValue = "sessionId" + "=" + sessionId;
HttpHeaders headers = new HttpHeaders();
headers.set("Set-Cookie", headerValue);
// 5. ์๋ต ๋ฐํ
return new ResponseEntity<>("๋ก๊ทธ์ธ ์ฑ๊ณต", headers, HttpStatus.OK);
}
ํ ํฐ ์ธ์ฆ ๋ฐฉ์
ํ ํฐ
- ์ฌ์ฉ์์ ์๋ฒ์ ์ฐ๊ฒฐ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋์ ํ ํฐ์ด๋ค.
ํ ํฐ ์ธ์ฆ ๋ฐฉ์
์ฟ ํค์ ์ ์ฅ๋ ๋ฌธ์์ด์๋ ์๋ฏธ๊ฐ ์๋ค.
์๋ฏธ๊ฐ ์๋ Value ๊ฐ์ด์ง๋ง ํ ๋ฒ ๊ผฌ์๋์ ๊ฒ์ด๋ค. (Base64 ์ธ์ฝ๋ฉ)
์ ์ฅ์ ํด๋ผ์ด์ธํธ์์ ํ๊ณ ์๋ค!
์ค์ต
@GetMapping("/token")
public String tokenAPI(HttpServletRequest request) {
log.info("::: AuthController.tokenAPI()");
Cookie[] cookies = request.getCookies();
String token = this.findCookie("token", cookies);
if (token != null) {
// ํ ํฐ์ ํด๋
ํด์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉ
String decodedToken = parseToken(token);
log.info("found token: {}", token);
log.info(decodedToken);
} else {
log.info("token not found");
}
return "success";
}
@GetMapping("/token-login")
public ResponseEntity<String> tokenLoginAPI() {
log.info("::: AuthController.tokenLoginAPI()");
// 1. ๋ก๊ทธ์ธ ๋ก์ง ์ฒ๋ฆฌ
// 2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
String userData = "userId: 1";
// 3. ํ ํฐ ์์ฑ
String encodedData = encodeToBase64(userData);
// 4. ์์ฑ - ํค๋ ์์ฑ
String headerValue = "token" + "=" + encodedData;
HttpHeaders headers = new HttpHeaders();
headers.set("Set-Cookie", headerValue);
// 5. ์๋ต ๋ฐํ
return new ResponseEntity<>("๋ก๊ทธ์ธ ์ฑ๊ณต", headers, HttpStatus.OK);
}
private String encodeToBase64(String input) {
byte[] encodedBytes = Base64.getEncoder().encode(input.getBytes());
String encodedToken = new String(encodedBytes);
return encodedToken;
}
private String parseToken(String token) {
byte[] decodedBytes = Base64.getDecoder().decode(token);
String decodedToken = new String(decodedBytes);
return decodedToken;
}
private String findCookie(String key, Cookie[] cookies) {
if (cookies != null ) {
for (Cookie cookie : cookies) {
if (key.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
์ธ์ฆ ๋ฐฉ์ ์ ๋ฆฌ โญโญโญโญโญ
๋ด์ฉ ํ์ธ ๊ฐ๋ฅ | ๋ด์ฉ ๋ณ์กฐ ๊ฐ๋ฅ | ์ ์ ์ํ ์ ์ฅ ์์น | ์๋ฒ ๋ถํ | |
์ฟ ํค | โ | โ | ํด๋ผ์ด์ธํธ | ๋ฎ์ |
์ธ์ | โ | โ | ์๋ฒ(์ธ์ ์ ์ฅ์) | ๋์ |
ํ ํฐ | โ (๋์ฝ๋ฉ์) | โ (์ธ์ฝ๋ฉ์) | ํด๋ผ์ด์ธํธ | ๋ฎ์ |
HttpSession - ์คํ๋ง์ ํ์ฉํ ์ธ์ ํ์ฉ
HttpSession session = request.getSession();
// ์ธ์
์์ด๋ ์กฐํ
String sessionid = session.getId();
// ์ธ์
๊ฐ ์ค์
session.setAttribute("memberId", memberId);
// ์ธ์
๊ฐ ์กฐํ
Long foundMemberId = (Long) session.getAttribute("memberId");
// ์ธ์
๊ฐ ์ ๊ฑฐ
session.removeAttribute("memberId");
// ์ธ์
์ญ์
session.invalidate();
// ์ธ์
์์ฑ ์๊ฐ ์กฐํ
long creationTime = session.getCreationTime();
// ์ธ์
๋ง์ง๋ง ์ ๊ทผ ์๊ฐ ์กฐํ
long lastAccessedTime = session.getLastAccessedTime();
// ์ธ์
์ ํจ ์๊ฐ ์ค์ (์ด๋จ์๋ก ์ค์ : 10์ด)
session.setMaxInactiveInterval(10);
// ์ธ์
์ ํจ ์๊ฐ ์กฐํ
int maxInactiveInterval = session.getMaxInactiveInterval();
// ์ ๊ท ์ธ์
์ฌ๋ถ ํ์ธ
boolean aNew = session.isNew();
ํํฐ ์ค๋ช
์์ฒญ ํ๋ฆ๋
MVC ๊ตฌ์กฐ ํ์ฅ ์ฌ์ฉ๋ฒ
โญ ์คํ๋ง ์์ฒญ ํ๋ฆ๋ โญ
์ ์ฒด ์ค์ต ์ฝ๋
@Slf4j
@RestController
@RequestMapping("/auth")
public class AuthController {
// ์ธ์
์ ์ฅ์
private final Map<String, String> sessionStorage = new HashMap<>();
@GetMapping("/cookie")
public String cookieAPI(HttpServletRequest request) {
log.info("::: AuthController.cookieAPI()");
Cookie[] cookies = request.getCookies();
String userId = this.findCookie("userId", cookies);
if (userId != null) {
log.info("found userId: {}", userId);
} else {
log.info("userId not found");
}
return "success";
}
@GetMapping("/cookie-login")
public ResponseEntity<String> cookieLoginAPI() {
log.info("::: AuthController.cookieLoginAPI()");
// 1. ๋ก๊ทธ์ธ ๋ก์ง ์ฒ๋ฆฌ
String cookieKey = "userId";
String userId = "1";
// 4. ์์ฑ - ํค๋ ์์ฑ
String headerValue = cookieKey + "=" + userId;
HttpHeaders headers = new HttpHeaders();
headers.set("Set-Cookie", headerValue);
// 5. ์๋ต ๋ฐํ
return new ResponseEntity<>("๋ก๊ทธ์ธ ์ฑ๊ณต", headers, HttpStatus.OK);
}
@GetMapping("/session")
public String sessionAPI(HttpServletRequest request) {
log.info("::: AuthController.sessionAPI()");
Cookie[] cookies = request.getCookies();
String sessionId = this.findCookie("sessionId", cookies);
if (sessionId != null) {
// ์ธ์
์ ์ฅ์์์ ์ ์ ๋ฐ์ดํฐ ์กฐํ & ํ์ฉ
String userData = sessionStorage.get(sessionId);
log.info("found session: {}", userData);
} else {
log.info("session not found");
}
return "success";
}
@GetMapping("/session-login")
public ResponseEntity<String> sessionLoginAPI() {
log.info("::: AuthController.sessionLogin()");
// 1. ๋ก๊ทธ์ธ ๋ก์ง ์ฒ๋ฆฌ
// 2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
String sessionId = "xxxx";
String sessionData = "userId: 1";
// 3. ์ธ์
์ ์ฅ์์ ๋ฐ์ดํฐ ์ ์ฅ
sessionStorage.put(sessionId, sessionData);
// 4. ์์ฑ - ํค๋ ์์ฑ
String headerValue = "sessionId" + "=" + sessionId;
HttpHeaders headers = new HttpHeaders();
headers.set("Set-Cookie", headerValue);
// 5. ์๋ต ๋ฐํ
return new ResponseEntity<>("๋ก๊ทธ์ธ ์ฑ๊ณต", headers, HttpStatus.OK);
}
@GetMapping("/token")
public String tokenAPI(HttpServletRequest request) {
log.info("::: AuthController.tokenAPI()");
Cookie[] cookies = request.getCookies();
String token = this.findCookie("token", cookies);
if (token != null) {
// ํ ํฐ์ ํด๋
ํด์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฉ
String decodedToken = parseToken(token);
log.info("found token: {}", token);
log.info(decodedToken);
} else {
log.info("token not found");
}
return "success";
}
@GetMapping("/token-login")
public ResponseEntity<String> tokenLoginAPI() {
log.info("::: AuthController.tokenLoginAPI()");
// 1. ๋ก๊ทธ์ธ ๋ก์ง ์ฒ๋ฆฌ
// 2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
String userData = "userId: 1";
// 3. ํ ํฐ ์์ฑ
String encodedData = encodeToBase64(userData);
// 4. ์์ฑ - ํค๋ ์์ฑ
String headerValue = "token" + "=" + encodedData;
HttpHeaders headers = new HttpHeaders();
headers.set("Set-Cookie", headerValue);
// 5. ์๋ต ๋ฐํ
return new ResponseEntity<>("๋ก๊ทธ์ธ ์ฑ๊ณต", headers, HttpStatus.OK);
}
@GetMapping("/filter")
public String filterAPI(HttpServletRequest request) {
log.info("::: AuthController.filterAPI()");
HttpSession session = request.getSession(false);
if (session == null) {
log.info("session not found");
return "session not found";
}
String userId = (String) session.getAttribute("user");
log.info("found userSession: {}", userId);
return "found user session: " + userId;
}
@GetMapping("/filter-login")
public String loginAPI(HttpServletRequest request) {
log.info("::: AuthController.loginAPI()");
// ์ธ์
์์ฑ
HttpSession session = request.getSession(true);
// ์ธ์
์ ์ฅ์์ ์ ์ ๋ฐ์ดํฐ ์ ์ฅ
String userId = "1";
session.setAttribute("user", userId);
return "Login successful";
}
private String encodeToBase64(String input) {
byte[] encodedBytes = Base64.getEncoder().encode(input.getBytes());
String encodedToken = new String(encodedBytes);
return encodedToken;
}
private String parseToken(String token) {
byte[] decodedBytes = Base64.getDecoder().decode(token);
String decodedToken = new String(decodedBytes);
return decodedToken;
}
private String findCookie(String key, Cookie[] cookies) {
if (cookies != null ) {
for (Cookie cookie : cookies) {
if (key.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
}
'Today I Learned(TIL) > ์์ค๋ณ ํ์ต๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์ค๋ณ ํ์ต๋ฐ_๋ฒ ์ด์ง๋ฐ 2ํ์ฐจ ์ธ์ (0) | 2024.12.11 |
---|---|
์์ค๋ณ ํ์ต๋ฐ_๋ฒ ์ด์ง๋ฐ 1ํ์ฐจ ์ธ์ (0) | 2024.12.07 |
์์ค๋ณ ํ์ต๋ฐ_์คํ ๋ค๋๋ฐ 1ํ์ฐจ (1) | 2024.12.04 |