본문 바로가기
Spring

[TIL] 231206Spring Optional, 쿠키, 세션 만들기, JWT

by studymode 2023. 12. 6.

 

Optional

‘null’일 수도 있는 객체를 감싸는 wrapper클래스

Optional<User> FindByUserName의 경우 FindByUserName.get()으로 담긴 객체 반환

.isPresent로 null인지 값이 담겼는지 확인 가능

 

 

 

 

쿠키 만들기

AuthController

public static void addCookie( String cookieValue, HttpServletResponse rep)

cookie Valuer를 받아오기

url 인코더에 넣어서 공백 제거 후 New Cookie생성 (AUTHORIZATION_HEADER, cookeValue)

Path, setMaxAge (만료기한) 등 넣기

 

이 정보를 HttpServlet에 담기: rep -> client에 반환

res.addCooke( cookie);

 

 

@GetMapping("/get-cookie")

...getCookie(@CookieValue (AUTHORIZATION_HEADER) String Value){
}

Authorization 중의 value값을 가죠옴

 

 

 

 

세션 만들기 코드

HttpSession :유일한 session ID를 만들어줌

 

@GetMapping
public String createSession(HttpServletRequest req){
}

servlet 요청이 들어왔을 때 req객체를 만들어줌

세션이 있을 경우 반환, 없을 경우 새로 생성

session.setAttribute으로 세션에 저장할 Name-Valuer 추가

 

 

세션 가져오기

getSession(HttpServletRequest req){
}

세션 존재할 경우 가져오고 아님 Null

session.getAttribute (AUTHORIZATION_HEADER); 스트링으로 받아서 가져옴

쿠키가 만들어짐

 

 

 

 

 

JWT 추가하기

appilcation properties에 jwt.secret.key 추가 (base64로 인코딩해서)

 

JwtUtil: jwt관련 기능

- Header KEY값 넣기 (vlaue에 토큰 넣기)

   // 쿠키에 key값 => Name

    AUTHORIXATION_HEADER = "Authorization";

- 사용자 권한 값의 KEY (admin / 일반유저 권한)

    AUTHORIZATION_KEY = "auth"

- Token 식별자

   BEARER_PREFIX = "Bearer ";

- 토큰 만료시간

   TOKEN_TIME

 

 

@value("${jwt.secret.key}")

application.properties의 시크릿 키 가져오기

private String secretKey;

private Key key; => key 객체 만들기

SignatureAlgorithm.H256

 

@Slf4: 로그 추가하기

 

@PostConstruct

Key 값에 우리의 secretKey를 넣음

 

//JWT생성(토큰 생성)

publiv String createToken

BEARER_PREFIX

 

//JWT를 쿠키에 저장

공백 빼고

AUTHORIZATION_HEADER에 인코딩

res.addCookie(cookie);

 

//cookie에 들어있던 JWT를 substring

Bearer빼기

 

 

//JWT 검증 (boolean으로 반환)

try{...setSigningKey(key).build().parseClaimsJws(toekn); //받아온 토큰
	returen true;
    
	} catch (유효X / 만료/ 지원하지X/ 잘못된 토큰) {
		logger.error("토큰 없음")
	}
return false;
}

 

 

//JWT에서 사용자 정보 가져오기

Claims로 JWT안에 있는 사용자정보 꺼내고 가져오기

 

 

==> AuthController에서 JwtUtil 받아오기!!

 

 

 

User Role Enum

USER(값) // 일반사용자

ADMIN(값) // 관리자 권한

UserRoleEnum(String authority){
this.authority = authority;
}

Authority 값을 static으로 만들기

user = user

admin = admin