Как сохранить токен в базе данных - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть класс User с:

int id;
String username;
String password; 
String token; 
Date tokenExpires;

И у меня есть такой метод:

private EntityManager em;
    private User authenticate(String username, String password) throws Exception {
        // Authenticate against a database, LDAP, file or whatever
        // Throw an Exception if the credentials are invalid

        Query query = em.createQuery("Select u from User u WHERE u.username = :name and u.password = :password");
        query.setParameter("name", username);
        query.setParameter("password", password);
        return (User) query.getSingleResult();      
    }

и метод для генерации токена:

    private String issueToken(String username) {
        Random random = new SecureRandom();
        String token = new BigInteger(130, random).toString(32);
        return token;
}

как сохранить этот токен в БД, каждый раз, когда пользователь входит в систему? поэтому, когда пользователь входит в систему, должен сгенерировать токен, если пользователь снова входит в систему, он должен сгенерировать новый токен

Ответы [ 2 ]

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

Когда пользователь входит в систему, просто выберите пользователя из базы данных, затем установите упомянутые поля, токен и дату его истечения:

public User updateUser(String username, String password) {
    User user = getUserBy(username, password);
    String token = issueToken();
    // token expires in 30 mins;
    Date tokenExpires = new Date(System.currentTimeMillis() + 1800000);
    user.setToken(token);
    user.setTokenExpires(tokenExpires);
    entityManager.getTransaction().begin();
    entityManager.merge(user);
    entityManager.getTransaction().commit();
}

Учитывая, что вы используете Hibernate, то пользователь модель также должна быть аннотирована:

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String username;
    private String password;
    private String token;

    @Temporal(TemporalType.TIMESTAMP)
    private Date tokenExpires;

    // getters and setters, make sure they are present
}
0 голосов
/ 06 апреля 2020

если вы используете пружину, попробуйте это руководство, например: https://javadeveloperzone.com/spring-boot/spring-boot-oauth2-jdbc-token-store-example/

...