JWTUtils2.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.icontrols.oauth.utils;
  2. import java.io.UnsupportedEncodingException;
  3. import java.security.GeneralSecurityException;
  4. import java.security.NoSuchAlgorithmException;
  5. import java.util.Base64;
  6. import java.util.Base64.Decoder;
  7. import org.json.JSONObject;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import com.icontrols.oauth.constants.CONSTANTS;
  11. import io.jsonwebtoken.Jwts;
  12. import io.jsonwebtoken.SignatureAlgorithm;
  13. public class JWTUtils2 {
  14. private static final Logger logger = LoggerFactory.getLogger(JWTUtils2.class);
  15. public JWTUtils2() {
  16. super();
  17. }
  18. // // icontrols1793!@# base64인코딩하고앞에 난수(dlswmd) 붙임
  19. // public static String ACCESS_TOEKN_SECRET_KEY = "dlswmdaWNvbnRyb2xzMTc5MyFAIw==";
  20. // // icontrolsrefresh1793!@#
  21. // public static String REFRESH_TOKEN_SECRET_KEY = "aWNvbnRyb2xzcmVmcmVzaDE3OTMhQCM=";
  22. /**
  23. *
  24. * @param token
  25. * @return
  26. * @throws UnsupportedEncodingException
  27. */
  28. public static boolean validateToken(String token) throws UnsupportedEncodingException {
  29. String secretKey = "";
  30. secretKey = CONSTANTS.ACCESS_TOEKN_SECRET_KEY;
  31. logger.info(token);
  32. Decoder decoder = Base64.getDecoder();
  33. // 시그니처가 맞는지 확인
  34. String enPayload = token.split("\\.")[1];
  35. String dePayload = new String(decoder.decode(enPayload));
  36. JSONObject obj = new JSONObject(dePayload);
  37. String jwt = Jwts.builder().claim("exp", obj.get("exp")) // 1시간 -> 설정정보로 변경해야함
  38. .claim("cmpIp", obj.get("cmpIp")).claim("homeId", obj.get("homeId")).claim("iat", obj.get("iat"))
  39. .signWith(SignatureAlgorithm.HS256, secretKey.getBytes("UTF-8")).compact();
  40. if (token.equals(jwt)) {
  41. long iat = Long.parseLong(obj.get("iat").toString());
  42. long currentTime = System.currentTimeMillis() / 1000;
  43. if (currentTime > iat + Long.parseLong(obj.get("exp").toString())) {
  44. return false;
  45. }
  46. return true;
  47. }
  48. return false;
  49. }
  50. /**
  51. *
  52. * @param token
  53. * @return 동/호
  54. * @throws UnsupportedEncodingException
  55. * @throws NoSuchAlgorithmException
  56. * @throws GeneralSecurityException
  57. */
  58. public static String getHomeIdFromToken(String token)
  59. throws UnsupportedEncodingException, NoSuchAlgorithmException, GeneralSecurityException {
  60. Decoder decoder = Base64.getDecoder();
  61. String enPayload = token.split("\\.")[1];
  62. String dePayload = new String(decoder.decode(enPayload));
  63. JSONObject obj = new JSONObject(dePayload);
  64. String encodedHomeId = obj.get("homeId").toString();
  65. AES256Util aes = new AES256Util();
  66. String homeId = aes.decrypt(encodedHomeId);
  67. return homeId;
  68. }
  69. }