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 + -
显示快捷键?