스프링 프로젝트로 인증 및 인가를 구현해보기

1. environmet variable 세팅

// env.properties 파일
jwt.prefix=Bearer
jwt.access.secret=purple
jwt.access.expiration=30
// PropertyConfig 파일
@Configuration
@PropertySource("classpath:/env.properties")
class PropertyConfig

// JwtTokenProvider 파일
@Component
@PropertySource("classpath:/env.properties")
class JwtTokenProvider(environment: Environment) {
    .
    .
    생략
    .
    .
    val prefix = environment.getProperty("jwt.prefix")!!
    val secret = environment.getProperty("jwt.access.secret")!!
    val expiration = environment.getProperty("jwt.access.expiration")!!

    fun issueAccessToken(user: User): String {
        val now = Date()

        return Jwts.builder()
            .setHeaderParam(Header.TYPE, Header.JWT_TYPE)
            .setIssuer("admin")
            .setIssuedAt(now)
            .setExpiration(Date(now.time + Duration.ofMinutes(expiration.toLong()).toMillis()))
            .claim("id", user.id)
            .claim("email", user.email)
            .signWith(SignatureAlgorithm.HS256, secret)
            .compact()
    }
}

2. jwt 토큰 세팅 및 발급

dependencies {
    .
    .
    생략
    .
    .
	implementation("io.jsonwebtoken:jjwt:0.9.1")
}
// JwtTokenProvider 파일
@Component
@PropertySource("classpath:/env.properties")
class JwtTokenProvider(environment: Environment) {

    val prefix = environment.getProperty("jwt.prefix")!!
    val secret = environment.getProperty("jwt.access.secret")!!
    val expiration = environment.getProperty("jwt.access.expiration")!!

    fun issueAccessToken(user: User): String {
        val now = Date()

        return Jwts.builder()
            .setHeaderParam(Header.TYPE, Header.JWT_TYPE)
            .setIssuer("admin")
            .setIssuedAt(now)
            .setExpiration(Date(now.time + Duration.ofMinutes(expiration.toLong()).toMillis()))
            .claim("id", user.id)
            .claim("email", user.email)
            .signWith(SignatureAlgorithm.HS256, secret)
            .compact()
    }
}