在这段代码中,您使用了 io.jsonwebtoken.security.Decoders 类来解码 Base64 编码的密钥。为了使用 java.util.Base64 类替换 Decoders 类,您需要修改以下行:
SecretKey a = Keys.hmacShaKeyFor(Decoders.BASE64.decode(b));
改为:
byte[] decodedKey = Base64.getDecoder().decode(b);
SecretKey a = Keys.hmacShaKeyFor(decodedKey);
此外,您还需要导入 javax.crypto.SecretKey 类:
import javax.crypto.SecretKey;
修改后的完整代码如下所示:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.Base64; // 导入 Base64 类
import javax.crypto.SecretKey; // 导入 SecretKey 类
public class JWTGeneratorGUI extends Application {
@Override
public void start(Stage primaryStage) {
// 创建密钥输入框和标签
Label secretLabel = new Label("nacos密钥: ");
PasswordField secretField = new PasswordField();
secretField.setPromptText("请输入nacos密钥");
// 创建用户名输入框和标签
Label usernameLabel = new Label("新建用户名:");
TextField usernameField = new TextField();
usernameField.setPromptText("请输入要生成token的用户名");
// 创建生成 token 按钮
Button generateButton = new Button("生成 token");
generateButton.setOnAction(e -> {
String b = secretField.getText();
byte[] decodedKey = Base64.getDecoder().decode(b); // 解码密钥
SecretKey a = Keys.hmacShaKeyFor(decodedKey);
Date validity = new Date(System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(2140000000));
String nacos = usernameField.getText();
Claims claims = Jwts.claims().setSubject(nacos);
String token = Jwts.builder().setClaims(claims).setExpiration(validity).signWith(a, SignatureAlgorithm.HS256).compact();
System.out.println("生成的 token 为:" + token);
});
// 创建布局
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
grid.add(secretLabel, 0, 0);
grid.add(secretField, 1, 0);
grid.add(usernameLabel, 0, 1);
grid.add(usernameField, 1, 1);
grid.add(generateButton, 1, 2);
// 创建场景和设置主窗口
Scene scene = new Scene(grid, 400, 250);
primaryStage.setTitle("JWTGeneratorGUI");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}




