Skip to content

Commit

Permalink
chore: gitignore 추가, JWT 설정 및 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
hongbin-dev committed Apr 15, 2021
1 parent 48c21d8 commit 10fda2d
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 4 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -189,4 +189,7 @@ gradle-app.setting
### Gradle Patch ###
**/build/

# End of https://www.toptal.com/developers/gitignore/api/windows,macos,intellij+all,java,gradle
# End of https://www.toptal.com/developers/gitignore/api/windows,macos,intellij+all,java,gradle

## profile
application-*.yml
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ repositories {
}

dependencies {
implementation 'io.jsonwebtoken:jjwt:0.9.1'

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
Expand Down
68 changes: 68 additions & 0 deletions src/main/java/com/undertheriver/sgsg/auth/common/JwtProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.undertheriver.sgsg.auth.common;

import java.util.Base64;
import java.util.Date;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.undertheriver.sgsg.common.exception.AccessTokenLoadException;
import com.undertheriver.sgsg.common.exception.ExpiredTokenException;
import com.undertheriver.sgsg.common.type.UserRole;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.JwtException;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

@Component
public class JwtProvider {

private final String secretKey;
private final long validityInMilliseconds;

public JwtProvider(
@Value("${security.jwt.token.secret-key:sample}") String secretKey,
@Value("${security.jwt.token.expire-length:300000}") long validityInMilliseconds
) {
this.secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
this.validityInMilliseconds = validityInMilliseconds;
}

public String createToken(Long userId, UserRole userRole) {
Claims claims = Jwts.claims();
claims.put("userId", String.valueOf(userId));
claims.put("role", userRole.name());

Date now = new Date();
Date validity = new Date(now.getTime() + validityInMilliseconds);

return Jwts.builder()
.setClaims(claims)
.setIssuedAt(now)
.setExpiration(validity)
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}

public Claims extractValidSubject(String token) {
validateToken(token);

return Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody();
}

private void validateToken(String token) {
try {
Jws<Claims> claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token);
validateExpiredTime(claims);
} catch (JwtException | IllegalArgumentException e) {
throw new AccessTokenLoadException();
}
}

private void validateExpiredTime(Jws<Claims> claims) {
if (claims.getBody().getExpiration().before(new Date())) {
throw new ExpiredTokenException();
}
}
}
24 changes: 21 additions & 3 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
server:
http2:
enabled: true
auth:
encrypt:
seed: B95D645620C482160DF37A0F6681800875FC3E0E07DEBC6687C4E9237689C013

spring:
profiles:
include: auth
datasource:
url: jdbc:h2:mem:testdb;IFEXISTS=FALSE;
jpa:
properties:
hibernate:
format_sql: true
show-sql: true
debug: true
logging

logging:
level:
org:
hibernate:
type:
descriptor:
sql: trace

---
spring:
Expand Down

0 comments on commit 10fda2d

Please sign in to comment.