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
'Spring' 카테고리의 다른 글
[TIL] 231207Spring Web, WAS, Servlet, HttpServlertRequest (1) | 2023.12.07 |
---|---|
[TIL] 231206Spring @RequestParam (0) | 2023.12.06 |
[TIL] 231201Spring 통합테스트 Service Test (0) | 2023.12.02 |
[TIL] 231130Spring 단위테스트 Unit Tests 반복테스트 Assertions Given-When-Then (0) | 2023.11.30 |
[TIL] 231130Spring Timestamped @Service @Transactional (0) | 2023.11.30 |