Мне удалось решить эту проблему, используя auth0-java-jwt
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import lombok.SneakyThrows;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.interfaces.ECPrivateKey;
import java.util.Date;
KeyStore store = KeyStore.getInstance("PKCS12");
//
store.load(new FileInputStream("/home/andrew/keystore.p12"), "test".toCharArray());
ECPrivateKey pk = (ECPrivateKey) store.getKey("selfsigned", "test".toCharArray());
Algorithm algorithmHS = Algorithm.ECDSA256(null, pk);
String token = JWT.create()
.withSubject("")
.withExpiresAt(new Date())
.withNotBefore(new Date())
.withIssuer("issuer")
.withClaim("roles", "b")
.withClaim("keys", "b")
.sign(algorithmHS);
Посмотрите этот поток Sun на том, почему они удержали от использования Thread.stop()
. Это вдается в подробности о том, почему это было плохим методом и что должно быть сделано для безопасной остановки потоков в целом.
способ, которым они рекомендуют, состоит в том, чтобы использовать совместно используемую переменную в качестве флага, который просит, чтобы фоновый поток остановился. Эта переменная может тогда быть установлена другим объектом, запрашивающим оконечный поток.
Один путь путем установки переменной класса и использования ее в качестве сигнальной метки.
Class Outer {
public static volatile flag = true;
Outer() {
new Test().start();
}
class Test extends Thread {
public void run() {
while (Outer.flag) {
//do stuff here
}
}
}
}
Набор внешняя переменная класса, т.е. флаг = верный в вышеупомянутом примере. Установите его на ложь для 'уничтожения' потока.
Обычно Вы не делаете..
Вы просите, чтобы это прервало независимо от того, что это делает использование Thread.interrupt () (javadoc ссылка)
А хорошее объяснение того, почему находится в javadoc здесь (Java technote ссылка)