Page 488 - MDP2022-3
P. 488

.build()
                                             .parseClaimsJws(token)
                                             .getBody();


                             Collection<?  extends  GrantedAuthority>  authorities  =
                                             Arrays.stream(claims.get(AUTHORITIES_KEY).toString().split(","))
                                                             .map(SimpleGrantedAuthority::new)
                                                             .collect(Collectors.toList());


                             User  principal  =  new  User(claims.getSubject(),  "",  authorities);


                             return  new  UsernamePasswordAuthenticationToken(principal,  token,  authorities);
                     }


                     public  boolean  validateToken(String  token)  {
                             try  {
                                     Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token);
                                     return  true;
                             }  catch  (io.jsonwebtoken.security.SecurityException  |  MalformedJwtException  e)  {
                                     log.info("잘못된  JWT  서명입니다.");
                             }  catch  (ExpiredJwtException  e)  {
                                     log.info("만료된  JWT  토큰입니다.");
                             }  catch  (UnsupportedJwtException  e)  {
                                     log.info("지원되지  않는  JWT  토큰입니다.");
                             }  catch  (IllegalArgumentException  e)  {
                                     log.info("JWT  토큰이  잘못되었습니다.");
                             }
                             return  false;
                     }


                     public  Boolean  validateRefreshToken(String  refreshToken){
                             try{
                                     Jws<Claims>                    claims                                =
             Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(refreshToken);
                                     //  refresh  토큰  만료가  안됬으면  새로운  access  토큰  생성.
                                     if(!claims.getBody().getExpiration().before(new  Date())){
                                     log.info("액세스  토큰  재생성");
                                     }
                                     return  Boolean.TRUE;
                             }
                             catch  (Exception  e){
                                     //  refresh  토큰이  만료된  경우,  로그인이  필요.
                                     log.info("재로그인  필요");
                                     return  Boolean.FALSE;
                             }
   483   484   485   486   487   488   489   490   491   492   493