JWT 설명은 링크 옆에 있습니다! jwt 설명
로그인할때 JWT 토큰은 2가지로 AccessToken과 RefreshToken 크게 두가지로 분류한다.

clinet에 저장되어 server로 보내서 권한 및 정보(사용자 정보, 만료시간,서명)를 확인
AccessToken이 기간이 짧아서 만약 다시 로그인을 할 번거러움이 있다. 예)30분으로 잡으면 다시 여기서 RefreshToken을 사용해서 다시 로그인을 하지 않아도 AccessToken 을 재발급 할 수있게 한다.
DB에 저장할때 user에 대한 식별자와 만료 시간을 저장하면된다!
보안을 위해 user의 PK값 뿐만아니라 UUID OR JWT도 함께 저장한다고 한다!
@Value("${token.secret.key}")
private String secretKey;
public SecretKey getSecretKey() {
return Keys.hmacShaKeyFor(secretKey.getBytes());
}
앞서 gitignore 했던부분에 properties부분에 token.secret.key 으로 했고
서명키에 필요한 부분이고 jjwt 라이브러리 사용할때 서명부분에 첫번째 파라미터에 Key객체를 사용하라고 하네요. 그래서! getSecretKey 부분에 return 을 Key 객체를 해주었습니다! 이부분은 나중에 더욱 자세히 공부할예정입니다

//token 생성
public String createToken(String email, String role){
String roleResult = role.substring(1, role.length()-1);
return Jwts.builder()
.setHeaderParam("typ", "JWT")
.setSubject(email) // 고유 식별할 수있는내용
.claim("role", role) // 권한 부여
.setIssuedAt(new Date()) // 발급 시간
.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 30))// 발금시간 30분
.signWith(getSecretKey(), SignatureAlgorithm.HS256)
.compact();
}
사용자 정보에는 일단 권한만 넣었습니다! 식별자 사용하는 이메일
그리고 권한이 [ADMIN] 이렇게 들어가서 수정 작업도 한줄했습니다.
발급 시간은 현재 시간이고 만료시간은 30분으로 했습니다. 이것도 properties에 보관한다고도 하네요 이렇게 작성하면 문자열로 작성된 JWT 생성!
public String getUserEmail(String token){
return Jwts.parserBuilder()
.setSigningKey(getSecretKey())
.build()
.parseClaimsJwt(token)
.getBody()
.getSubject(); // subject 식별이름
}
JWT생성했으면 생성된 token을 가지고 파싱도 해야 사용자 정보를 확인 할수있다.
서명키를 가져와 확인하고 build()까지가 객체 빌드 (JwtParser 반환!) 이후 token을 가져와 body 부분에 subject 위에 식별자를 반환한다.

JWT를 잘 받아온것을 알수 있습니다!
만료 토큰 반환방법이나 reflesh Token을 가지고 만료된시점을 구별해서 Security + JWT를 사용해서 로그인 처리 및 토큰 만료 처리를 하겠습니다!
긴글 읽어 주셔서 감사합니다! :)