Как проверить, не истек ли токен в java? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть пользователь, у которого есть: id, имя пользователя, пароль, tokenExpires, который является датой. Когда я генерирую токен, я генерирую строку, как проверить, не истек ли токен?

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

java .time

Используйте java .time, современный Java API даты и времени, для вашей работы с датой и временем.

public class User {
    private String username;
    private String password;
    private Instant tokenExpires;

    // constructor, getters, setters

    public boolean isTokenExpired() {
        return ! Instant.now().isBefore(tokenExpires);
    }

}

Современный замена для Date является Instant. Это момент времени.

Если вы не можете изменить класс User, а getTokenExpires() возвращает устаревший Date объект:

    Instant tokenExpires = yourUser.getTokenExpires().toInstant();
    if (Instant.now().isBefore(tokenExpires)) {
        System.out.println("Token has not expired");
    } else {
        System.out.println("Token not expired");
    }

Ссылка: Oracle учебник: Дата и время объяснение, как использовать java .time.

0 голосов
/ 06 апреля 2020

Может быть, лучше использовать JWT. Вы можете определить, как долго токен должен быть действительным, а данные о пользователе могут храниться в виде утверждений. Вот пример учебника: https://developer.okta.com/blog/2018/10/31/jwts-with-java Я думаю, что это лучшее решение, потому что вам не нужно реализовывать все функции. В вашей текущей реализации есть шанс, что какой-то пользователь изменит полезную нагрузку. Но помните, что такие данные, как пароли, не должны быть включены в JWT, потому что любой, у кого есть токен, может прочитать все утверждения.

0 голосов
/ 06 апреля 2020

Основной лог c, стоящий за ним, будет сравнивать текущую дату с датой токена. Если текущая дата больше даты токена, токен истек. Вот пример кода для того же.

  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Date date1 = sdf.parse("2009-12-31");
  Date date2 = sdf.parse("2010-01-31");

  if (date1.compareTo(date2) >= 0) 
      System.out.println("Token not expired");
  else if (date1.compareTo(date2) < 0) 
      System.out.println("Token expired");

Ссылка: Как сравнить даты в Java

...