как вы возвращаете строковое значение в ноль через 100 секунд или после того, как оно было вызвано один раз? - PullRequest
2 голосов
/ 24 октября 2019

В настоящее время я собираю токены reCAPTCHA, сохраняю их в буфер обмена, а затем вытаскиваю их из буфера обмена, чтобы сохранить в виде строк, а затем при необходимости повторно ввести на нужный веб-сайт. Тем не менее, один токен действителен только для одного использования, и они действительны только в течение 110 секунд (я собираюсь в течение 100 секунд, просто чтобы избежать любых ошибок, которые могут возникнуть при использовании его в течение 110 секунд, так как он становится недействительным). из-за этого мне нужно возвращать значения этих строк в null после их использования или после того, как они были сохранены в течение 100 секунд.

[Edit] Мне также нужно иметь доступ к этим токенам из другого класса

если у кого-то есть какие-либо предложения или знания в этой области, помощь будет высоко ценится

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Другой способ - использовать базовые классы java и лямбды.

    AtomicReference<String> myToken = new AtomicReference<>();
    ScheduledFuture future;
    ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);

В другом месте вашего кода вы увидите, был ли он нулевым, когда вам это нужно, и получите другой, если необходимо.

    String tokenValue = myToken.getAndSet(null);
    if (tokenValue == null) {
        tokenValue = "anothertokenvalue";
        myToken.set(tokenValue);
        future = exec.schedule(() -> myToken.set(null), 100, TimeUnit.SECONDS);
    } else {
        if (future != null) {
            future.cancel(true);
        }
    }
0 голосов
/ 25 октября 2019

Вы можете попробовать Guava CacheBuilder

Например;

инициализировать хранилище токенов;

final Cache<String, String> tokens = CacheBuilder.newBuilder()
            .expireAfterWrite(100, TimeUnit.SECONDS)
            .build();

положить несколько токенов;

tokens.put("TOKEN_1", "TOKEN_1");
tokens.put("TOKEN_2", "TOKEN_2");

удалить токен после использования;

synchronized (tokens) {
        tokens.getIfPresent("USED_TOKEN");
        tokens.invalidate("USED_TOKEN");
    }

Они будут удалены из кэша через 100 секунд, даже если они не используются

...