@ShellMethod(key = "generate-jwt", value = "Generate a JWT with given size and algorithm for signing and encryption.")
    public void generate(
        @ShellOption(value = {"signingSecretSize", "--signingSecretSize"},
            help = "Size of the signing secret",
            defaultValue = StringUtils.EMPTY + DEFAULT_SIGNING_SECRET_SIZE) final int signingSecretSize,
        @ShellOption(value = {"encryptionSecretSize", "--encryptionSecretSize"},
            help = "Size of the encryption secret",
            defaultValue = StringUtils.EMPTY + DEFAULT_ENCRYPTION_SECRET_SIZE) final int encryptionSecretSize,
        @ShellOption(value = {"signingAlgorithm", "--signingAlgorithm"},
            help = "Algorithm to use for signing",
            defaultValue = DEFAULT_SIGNING_ALGORITHM) final String signingAlgorithm,
        @ShellOption(value = {"encryptionAlgorithm", "--encryptionAlgorithm"},
            help = "Algorithm to use for encryption",
            defaultValue = DEFAULT_ENCRYPTION_ALGORITHM) final String encryptionAlgorithm,
        @ShellOption(value = {"encryptionMethod", "--encryptionMethod"},
            help = "Method to use for encryption",
            defaultValue = DEFAULT_ENCRYPTION_METHOD) final String encryptionMethod,
        @ShellOption(value = {"subject", "--subject"},
            help = "Subject to use for the JWT") final String subject) {

        val g = new JwtGenerator();

        configureJwtSigning(signingSecretSize, signingAlgorithm, g);
        configureJwtEncryption(encryptionSecretSize, encryptionAlgorithm, encryptionMethod, g);

        val profile = new CommonProfile();
        profile.setId(subject);

        val repeat = "=".repeat(SEP_LENGTH);
        LOGGER.debug(repeat);
        LOGGER.info("""
                Generating JWT for subject [{}] with signing key size [{}], signing algorithm [{}],
                encryption key size [{}], encryption method [{}] and encryption algorithm [{}]
                """, subject, signingSecretSize, signingAlgorithm,
            encryptionSecretSize, encryptionMethod, encryptionAlgorithm);
        LOGGER.debug(repeat);

        val token = g.generate(profile);
        LOGGER.info("==== JWT ====\n[{}]", token);
    }
Generate.

@param signingSecretSize    the signing secret size
@param encryptionSecretSize the encryption secret size
@param signingAlgorithm     the signing algorithm
@param encryptionAlgorithm  the encryption algorithm
@param encryptionMethod     the encryption algorithm
@param subject              the subject
support/cas-server-support-shell-core/src/main/java/org/apereo/cas/shell/commands/jwt/GenerateJwtCommand.java