From c9f2a8390a27f6dd78153026db03d913c9175f0f Mon Sep 17 00:00:00 2001 From: Art Date: Sat, 4 Sep 2021 17:32:27 +0300 Subject: [PATCH] 27. JWT Token Provider - Part 2 (#2) --- .../backend/utility/JwtTokenProvider.java | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/utility/JwtTokenProvider.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/utility/JwtTokenProvider.java index 11bf83e..d587c7a 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/utility/JwtTokenProvider.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/utility/JwtTokenProvider.java @@ -1,11 +1,18 @@ package net.shyshkin.study.fullstack.supportportal.backend.utility; import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTVerificationException; import net.shyshkin.study.fullstack.supportportal.backend.domain.UserPrincipal; import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import java.util.Arrays; import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; import static net.shyshkin.study.fullstack.supportportal.backend.constant.SecurityConstants.*; @@ -26,7 +33,36 @@ public class JwtTokenProvider { .sign(Algorithm.HMAC512(secret)); } + public List getAuthorities(String token) { + String[] claims = getClaimsFromToken(token); + return Arrays.stream(claims) + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()); + } + + private String[] getClaimsFromToken(String token) { + JWTVerifier verifier = getJwtVerifier(); + try { + return verifier.verify(token) + .getClaim(AUTHORITIES) + .asArray(String.class); + } catch (JWTVerificationException exception) { + throw new JWTVerificationException(ACCESS_DENIED_MESSAGE); + } + } + + private JWTVerifier getJwtVerifier() { + + Algorithm algorithm = Algorithm.HMAC256(secret); + return JWT.require(algorithm) + .withIssuer(GET_ARRAYS_LLC) + .build(); //Reusable verifier instance + } + private String[] getClaimsFromUser(UserPrincipal userPrincipal) { - return new String[0]; + return userPrincipal.getAuthorities() + .stream() + .map(GrantedAuthority::getAuthority) + .toArray(String[]::new); } }