keystoremanager.java

来自「Java生成PDF Java生成PDF Java生成PDF」· Java 代码 · 共 1,324 行 · 第 1/5 页

JAVA
1,324
字号
                JPanel panel = new JPanel(new BorderLayout());                panel.add(label);                panel.setOpaque(true);                panel.setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());                panel.setForeground(isSelected ? list.getSelectionForeground() : list.getForeground());                panel.setFont(list.getFont());                return panel;            } catch (GeneralSecurityException e) {                throw new IllegalArgumentException(SuperJOptionPane.getLocalizedString("InvalidWhy", e.getMessage()));            }        }    }    //-------------------------------------------------------------------------------------    /**     * Create a new File-based KeyStoreManager. The KeyStore filename is fixed, and     * if "create" is true the keystore will be created if it doesn't already exist.     * @param parent the root Component for dialogs     * @param filename the File     * @param password the password to verify the KeyStore or null     * @param type the type of KeyStore, or <code>null</code> to choose an appropriate type     * @param provider the Provider, or <code>null</code> to use the default provider     * @param create whether to create the KeyStore if it doesn't exist     */    public static KeyStoreManager createFixedKeyStoreManager(Component parent, String filename, char[] password, String type, String provider, boolean create) {        if (filename==null) throw new IllegalArgumentException("File is null");        FileKeyStoreManager manager = new FileKeyStoreManager(parent, type, provider);        manager.setFile(new File(filename), password, false, create);        return manager;    }    /**     * Create a new File-based KeyStoreManager. Although the KeyStore filename is specified,     * the user may load a new KeyStore at any time. If the KeyStore doesn't exist and the     * create parameter is true, the user will be prompted to select a KeyStore on load.     * @param parent the root Component for dialogs     * @param filename the File     * @param password the password to verify the KeyStore or null     * @param type the type of KeyStore, or <code>null</code> to choose an appropriate type     * @param provider the Provider, or <code>null</code> to use the default provider     * @param create whether to create the KeyStore if it doesn't exist     */    public static KeyStoreManager createPromptKeyStoreManager(Component parent, String filename, char[] password, String type, String provider, boolean create) {        FileKeyStoreManager manager = new FileKeyStoreManager(parent, type, provider);        manager.setFile(filename==null ? null : new File(filename), password, true, create);        return manager;    }    public static KeyStoreManager createDefaultKeyStoreManager(Component parent) {        try {            return createPromptKeyStoreManager(parent, System.getProperty("user.home")+"/bfopdf.jks", null, null, null, true);        } catch (SecurityException e) {            return createPromptKeyStoreManager(parent, null, null, null, null, true);        }    }    /*    public static void main(String[] args) throws Exception {        JFrame frame = new JFrame("BFO");        KeyStoreManager man = KeyStoreManager.createPromptKeyStoreManager(frame, args.length==0?null:args[0], null, null, null, false);        man.showIdentityManagementDialog();    }    */    /**     * Set the filters on this chooser     * @param chooser the Chooser     * @param values an array of "keystore", "jks", "pkcs12", "cer", "pdf"     * @param chosen the filter to choose by default, or null     */    static void setFileFilters(JFileChooser chooser, String[] filters, String chosen) {        FileFilter chosenfilter = null;        for (int i=0;i<filters.length;i++) {            final String type = filters[i];            FileFilter filter = new FileFilter() {                public boolean accept(File f) {                    if (f.isDirectory()) {                        return true;                    } else {                        String n = f.getName().toLowerCase();                        if (type.equals("keystore")) {                            return n.endsWith(".jks") || n.equals(".keystore") || n.endsWith(".p12") || n.endsWith(".pfx") || n.endsWith(".pkcs12");                        } else if (type.equals("jks")) {                            return n.endsWith(".jks") || n.equals(".keystore");                        } else if (type.equals("pkcs12")) {                            return n.endsWith(".p12") || n.endsWith(".pfx") || n.endsWith(".pkcs12");                        } else if (type.equals("cer")) {                            return n.endsWith(".cer") || n.endsWith(".crt");                        } else if (type.equals("pdf")) {                            return n.endsWith(".pdf");                        }  else {                            return false;                        }                    }                }                public String getDescription() {                    if (type.equals("keystore")) {                        return SuperJOptionPane.getLocalizedString("FilesKeyStore");                    } else if (type.equals("jks")) {                        return SuperJOptionPane.getLocalizedString("FilesJKS");                    } else if (type.equals("pkcs12")) {                        return SuperJOptionPane.getLocalizedString("FilesPKCS12");                    } else if (type.equals("cer")) {                        return SuperJOptionPane.getLocalizedString("FilesCertificate");                    } else if (type.equals("pdf")) {                        return SuperJOptionPane.getLocalizedString("FilesPDF");                    } else {                        return null;                    }                }            };            if (type==chosen) {                chosenfilter = filter;            }            chooser.addChoosableFileFilter(filter);        }        if (chosenfilter!=null) chooser.setFileFilter(chosenfilter);    }}class FileKeyStoreManager extends KeyStoreManager{    private final String type, provider;    private File keystorefile;    private transient char[] keystorepass;    private boolean prompt, create;    FileKeyStoreManager(Component parent, String type, String provider) {        super(parent);        this.type = type;        this.provider = provider;        this.prompt = true;        this.create = false;    }    /**     * Set a KeyStore file which cannot change. If prompt is false then     * the filename cannot be changed - if it doesn't exist it will be     * created (if create is true) or an error raised. If prompt is true     * then the filename may be selected if it doesn't exist. Whether this     * is done when loading or saving depends on whether create is false     * or true respectively.     */    void setFile(File file, char[] password, boolean prompt, boolean create) {        if (!prompt && file==null) throw new NullPointerException("file==null");        this.keystorefile =  file;        this.keystorepass = password;        this.prompt = prompt;        this.create = create;    }    protected char[] getDefaultKeyPassword() {        return keystorepass;    }    protected boolean isKeyStoreReloadable() {        return prompt;    }    protected KeyStore reloadKeyStore() throws IOException, GeneralSecurityException {        keystorefile = null;        keystorepass = null;        return loadKeyStore();    }    protected KeyStore loadKeyStore() throws IOException, GeneralSecurityException {        KeyStore keystore = null;        if (prompt) {            Map out = new HashMap();            out.put("File", keystorefile);            out.put("Password", keystorepass);            String type = this.type;            do {                File file = (File)out.get("File");                char[] pass = (char[])out.get("Password");                if (file!=null) {                    if (pass!=null && pass.length==0) pass = null;                    if (type==null) type = guessType(file);                    keystore = provider==null ? KeyStore.getInstance(type) : KeyStore.getInstance(type, provider);                    try {                        InputStream in = new FileInputStream(file);                        keystore.load(in, pass);                        in.close();                        this.keystorefile = file;                        this.keystorepass = pass;                    } catch (Exception e) {                        if (file!=keystorefile) {                            SuperJOptionPane.displayThrowable(SuperJOptionPane.getLocalizedString("Error"), e, parent);                        }                        keystore = null;                    }                }                if (keystore==null) {                    if (!create || file==null) {                        out = chooseFile("ManageIdentities", keystorefile, this.type, keystorepass, true);                    } else {                        out = null;                    }                }            } while (keystore==null && out!=null);            if (keystore==null) {                type = this.type;                if (type==null) type = KeyStore.getDefaultType();                keystore = provider==null ? KeyStore.getInstance(type) : KeyStore.getInstance(type, provider);                initializeKeyStore(keystore);            }        } else {            String type = this.type;            if (type==null) type = guessType(keystorefile);            keystore = provider==null ? KeyStore.getInstance(type) : KeyStore.getInstance(type, provider);            try {                InputStream in = new FileInputStream(keystorefile);                keystore.load(in, keystorepass);                in.close();            } catch (Exception e) {                if (!create || keystorefile.canRead()) {                    SuperJOptionPane.displayThrowable(SuperJOptionPane.getLocalizedString("Error"), e, parent);                }                if (create) {                    initializeKeyStore(keystore);                } else {                    keystore = null;                }            }        }        return keystore;    }    protected boolean saveKeyStore(KeyStore keystore) {        Map out = new HashMap();        out.put("File", keystorefile);        out.put("Password", keystorepass);        while (out!=null) {            File file = (File)out.get("File");            char[] pass = (char[])out.get("Password");            if (file!=null && pass!=null && pass.length>0) {                try {                    FileOutputStream stream = new FileOutputStream(file);                    keystore.store(stream, pass==null ? new char[0] : pass);                    stream.close();                    keystorefile = file;                    keystorepass = pass;                    return true;                } catch (Exception e) {                    SuperJOptionPane.displayThrowable(SuperJOptionPane.getLocalizedString("Error"), e, parent);                    if (prompt) {                        out = chooseFile("ManageIdentities", keystorefile, keystore.getType(), keystorepass, false);                    } else {                        return false;                    }                }            } else {                out = chooseFile("ManageIdentities", keystorefile, keystore.getType(), keystorepass, false);            }        }        return false;    }    private Map chooseFile(String title, File file, final String type, char[] password, final boolean open) {        JFileChooser filechooser = new JFileChooser(keystorefile);        if (file==null) file = new File(System.getProperty("use

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?