728x90
반응형
SMALL
안녕하세요! 프뚜입니다.
이전에 JWT 관련해서 포스팅했지만, 내용이 부족하고 소스가 없는 관계로 자세한 설명과 소스를 첨부하려고 합니다.
[개발 환경]
- OS: Windows 10 64bit
- JAVA: 1.8
# build.gradle 설정하기
// 2022.12.15[프뚜]: JWT
implementation("io.jsonwebtoken:jjwt:0.9.1")
implementation('javax.xml.bind:jaxb-api:2.4.0-b180830.0359')
# application.properties에 secretKey 넣기
# 2022.12.15[프뚜]: token key 유실 X
pddu.jwt.key=pddu
키가 변경되면 이전에 발행된 token은 사용할 수 없습니다.
# init 메소드에 key 값 세팅하기
@Value("${pddu.jwt.key}")
private String secretKey;
private SignatureAlgorithm signatureAlgorithm;
private Key signingKey;
@PostConstruct
private void init() throws Exception {
// 2022.12.15[프뚜]: 암호화 기법 설정
signatureAlgorithm = SignatureAlgorithm.HS512;
// 2022.12.15[프뚜]: 암호키 설정(보안으로 인해 프로퍼티에 설정)
byte[] secretKeyBytes = DatatypeConverter.parseBase64Binary(secretKey);
signingKey = new SecretKeySpec(secretKeyBytes, signatureAlgorithm.getJcaName());
}
@PostConstruct를 사용해서 init 지점을 실행합니다.
# JWT Token 생성하기
public String create() throws Exception {
// 2022.12.15[프뚜]: body에 넣을 값 생성
Map<String, Object> body = new HashMap<>();
body.put("name", "pddu");
body.put("birth", "0801");
body.put("hobby", "coding");
// 2022.12.15[프뚜]: 1시간짜리 토큰 발행
JwtBuilder builder = Jwts.builder()
.setClaims(body)
.signWith(signatureAlgorithm, signingKey)
.setExpiration(new Date(System.currentTimeMillis() + (3600 * 1000)));
return builder.compact();
}
토큰에 대한 자세한 내용은 링크를 통해 확인해보실 수 있습니다.
# JWT Token 해석하기
public String check(String token) throws Exception {
// 2022.12.15[프뚜]: token 해석
Map<String, Object> body = Jwts.parser()
.setSigningKey(signingKey)
.parseClaimsJws(token)
.getBody();
return body.toString();
}
발행된 토큰을 해독하는 방법입니다.
# 발행 및 해석 테스트 하기
@Autowired
private JwtService jwtService;
@Test
void create() throws Exception {
String token = jwtService.create();
System.out.println("[LOG] 토큰이 발생되었습니다. > " + token);
String body = jwtService.check(token);
System.out.println("[LOG] 토큰의 바디 값입니다. > " + body);
}
생성한 토큰의 claim값을 확인할 수 있습니다.
자세한 내용은 소스코드를 통해 확인해보실 수 있습니다. (제목과 Git Comment는 같습니다.)
728x90
반응형
LIST
'프로그램 > JAVA' 카테고리의 다른 글
[AOP] SpringBoot AOP 사용하기 (2) | 2022.12.30 |
---|---|
[JWT] Spring Interceptor 세팅 및 사용하기 (2) | 2022.12.28 |
[SpringBoot] Redis에서 keys VS scan 사용하기 (keys 대신 scan) (3) | 2022.12.05 |
[ELK] SpringBoot + ELK 연동 및 사용하기 (0) | 2022.11.25 |
[SolrJ] spring boot + solrj 연동 및 사용하기 (0) | 2022.11.24 |