Class DefaultJwtAuthenticationProviderImpl
- All Implemented Interfaces:
JwtAuthenticationProvider
JwtAuthenticationProvider의 기본 구현체
application.yml(또는 .properties)의 프로퍼티 값들을
필드들에 바인딩한 JwtProperties 객체를 이용함
-
Field Summary
FieldsFields inherited from interface com.jerocaller.libs.spoonsuits.web.jwt.JwtAuthenticationProvider
AUTHORIZATION, BEARER -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncreateAccessToken(org.springframework.security.core.userdetails.UserDetails user) 유저 정보를 통해 Access token을 생성하는 메서드.createRefreshToken(org.springframework.security.core.userdetails.UserDetails user) 유저 정보를 통해 Refresh token을 생성, 반환하는 메서드createToken(org.springframework.security.core.userdetails.UserDetails user, long expirationInMilliSeconds) JWT 토큰 생성 메서드io.jsonwebtoken.ClaimsextractClaims(String token) JWT로부터 모든 클레임들을 추출하기 위한 메서드.extractUsernameFromToken(String token) JWT의 subject에 username이 있는 경우 이를 통해 username을 추출하는 메서드.org.springframework.security.core.AuthenticationgetAuthentication(String token) SecurityContextHolder에 JWT 토큰으로부터 얻은 사용자 정보를Authentication타입으로 저장하기 위해 JWT 토큰으로부터 추출한 사용자 정보를 Authentication 객체로 반환하는 메서드.voidinit()JWT secret key 생성resolveToken(jakarta.servlet.http.HttpServletRequest request) HTTP request의 headerAuthorization: Bearer에 담긴 JWT를 추출, 반환resolveTokenInCookie(jakarta.servlet.http.HttpServletRequest request, String cookieName) 쿠키에 JWT를 담은 경우, 해당 쿠키로부터 JWT를 추출, 반환하는 메서드.booleanvalidateToken(String token) JWT 토큰 유효성 검사 메서드.
-
Field Details
-
jwtProperties
-
secretKey
-
-
Constructor Details
-
DefaultJwtAuthenticationProviderImpl
public DefaultJwtAuthenticationProviderImpl()
-
-
Method Details
-
init
@PostConstruct public void init()JWT secret key 생성
-
createToken
public String createToken(org.springframework.security.core.userdetails.UserDetails user, long expirationInMilliSeconds) JWT 토큰 생성 메서드
JWT 생성 구조)
return Jwts.builder() .header() .type("JWT") .and() .subject(user.getUsername()) .claims(roles) .issuedAt(new Date()) .issuer(jwtProperties.getIssuer()) // expiration = new java.util.Date(System.currentTimeMillis() + expirationInMilliSeconds) .expiration(expiration) .signWith(secretKey) .compact();-
roles는List<String>타입. -
subject에 username이 들어가
extractUsernameFromToken(String)메서드를 이용하여 손쉽게 username을 추출할 수 있음.
- Specified by:
createTokenin interfaceJwtAuthenticationProvider- Parameters:
user- 사용자 정보가 담긴 UserDetails 구현체expirationInMilliSeconds- JWT 만료 시간(ms)- Returns:
- 생성된 JWT 토큰
- See Also:
-
-
resolveToken
HTTP request의 header
Authorization: Bearer에 담긴 JWT를 추출, 반환쿠키를 이용하여 JWT를 운용하는 경우, 쿠키로부터 JWT값을 추출하고자 한다면
resolveTokenInCookie(HttpServletRequest, String)를 사용하면 된다.- Specified by:
resolveTokenin interfaceJwtAuthenticationProvider- Parameters:
request-- Returns:
- JWT 토큰
-
validateToken
JWT 토큰 유효성 검사 메서드.
토큰의 만료 여부, 토큰 변조 여부 등으로 발생하는 예외는 별도로 처리하지 않고 한꺼번에 false로 처리하기에, 각 상황에 따른 예외 처리를 하고자 한다면 이 메서드를 오버라이딩하여 별도로 구현해야 함.
- Specified by:
validateTokenin interfaceJwtAuthenticationProvider- Parameters:
token-- Returns:
- 유효 시 true, 만료 등의 이유로 유효하지 않으면 false
-
getAuthentication
SecurityContextHolder에 JWT 토큰으로부터 얻은 사용자 정보를Authentication타입으로 저장하기 위해 JWT 토큰으로부터 추출한 사용자 정보를 Authentication 객체로 반환하는 메서드.principal에는 String 타입의 username을 넣도록 함. 따라서
Authentication.getPrincipal()의 반환값도 String 타입이다.- Specified by:
getAuthenticationin interfaceJwtAuthenticationProvider- Parameters:
token-- Returns:
-
createAccessToken
유저 정보를 통해 Access token을 생성하는 메서드.
내부적으로
createToken(UserDetails, long)을 호출하여 토큰을 생성하며, 토큰 만료 기간은JwtProperties와 매핑되는 application.yml(.properties) 의jwt.token.access.expiry의 값으로 함.- Specified by:
createAccessTokenin interfaceJwtAuthenticationProvider- Parameters:
user-- Returns:
- See Also:
-
createRefreshToken
유저 정보를 통해 Refresh token을 생성, 반환하는 메서드
내부적으로
createToken(UserDetails, long)을 호출하여 토큰을 생성하며, 토큰 만료 기간은JwtProperties와 매핑되는 application.yml(.properties) 의jwt.token.refresh.expiry의 값으로 함.- Specified by:
createRefreshTokenin interfaceJwtAuthenticationProvider- Parameters:
user-- Returns:
- See Also:
-
resolveTokenInCookie
public String resolveTokenInCookie(jakarta.servlet.http.HttpServletRequest request, String cookieName) 쿠키에 JWT를 담은 경우, 해당 쿠키로부터 JWT를 추출, 반환하는 메서드.
- Specified by:
resolveTokenInCookiein interfaceJwtAuthenticationProvider- Parameters:
request-cookieName- JWT가 담긴 쿠키 이름- Returns:
-
extractClaims
Description copied from interface:JwtAuthenticationProviderJWT로부터 모든 클레임들을 추출하기 위한 메서드.
- Specified by:
extractClaimsin interfaceJwtAuthenticationProvider- Parameters:
token- 추출하고자 하는 JWT 토큰- Returns:
- 추출된 모든 클레임
-
extractUsernameFromToken
JWT의 subject에 username이 있는 경우 이를 통해 username을 추출하는 메서드.
- Specified by:
extractUsernameFromTokenin interfaceJwtAuthenticationProvider- Parameters:
token- username을 추출하고자 하는 JWT 토큰- Returns:
- username
-