글을 쓴 이유
- 이번에 지인들과 게임을 만들기로 했다 나는 서버를 맡았다. 로그인 정보를 넘겨주면 DB와 확인 후 토큰을 발급해주고 토큰을 확인해주는 서비스를 만들어야했기에 이번에 기회에 세션만 사용했지만 jwt를 알아보게되었다.
dependensy
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.3</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
controller
package com.spring.boot.api.controller;
import com.spring.boot.api.service.MemberService;
import org.slf4j.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/member")
public class MemberController {
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired
private MemberService memberService;
@PostMapping("/requestJwt")
public String createJwt(@RequestParam("id") String id) {
return memberService.createJwt(id);
}
@PostMapping("responseJwt")
public String getJwt(@RequestParam("jwt")String jwt) {
return memberService.getJwt(jwt);
}
}
Service
- createJwt()
setSubject = 어떤변수를 토큰으로 만들것인지 변수값을 넘겨주면된다.
signWith = 해싱 알고리즘과 시크릿 키를 설정할 수 있습니다.
setExpiration = 만료시간을 설정
- getSecretKeySpec()
시크릿키를 byte로 변환한 값을 주어 객체를 받아온다.
- getJwt()
parseClaimsJws = 토큰을 세팅
getSubject = decoding된 토큰의 subject를 볼 수 있다. 여기서는 id를 볼 수 있는것이다.
package com.spring.boot.api.service;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Service;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.util.Date;
@Service
public class MemberService {
private static final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
public String createJwt(String id) {
return Jwts.builder()
.setSubject(id)
.signWith(signatureAlgorithm, getSecretKeySpec(DatatypeConverter.parseBase64Binary("secretKey")))
.setExpiration(new Date(System.currentTimeMillis() + 2 * 1000 * 60))
.compact();
}
public String getJwt(String jwt) {
try {
return Jwts.parser()
.setSigningKey(DatatypeConverter.parseBase64Binary("secretKey"))
.parseClaimsJws(jwt)
.getBody()
.getSubject();
} catch (Exception e) {
throw new RuntimeException("parseError : " + e.getMessage());
}
}
public SecretKeySpec getSecretKeySpec(byte[] secretKeyBytes) {
return new SecretKeySpec(secretKeyBytes, signatureAlgorithm.getJcaName());
}
}
'몰아 넣기' 카테고리의 다른 글
[java/spring] 엑셀 다운로드 예제(Excel download) (0) | 2022.07.10 |
---|---|
[java/spring]엑셀 업로드 예제(Excel upload) (0) | 2022.07.10 |
[자바/spring] 이미지 업로드 예제 (0) | 2022.07.10 |
[java/spring] UUID를 사용해서 파일이름 랜덤으로 만들기 또는 이미지 확장자 체크하기 (0) | 2022.07.10 |
[java/spring/api] 스프링부트 구글 로그인 인가코드 또는 엑세스토큰을 이용하여 구현하기 (0) | 2022.07.03 |