⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dnfieldextractor.java

📁 一套JAVA的CA证书签发系统.
💻 JAVA
字号:
/************************************************************************* *                                                                       * *  EJBCA: The OpenSource Certificate Authority                          * *                                                                       * *  This software is free software; you can redistribute it and/or       * *  modify it under the terms of the GNU Lesser General Public           * *  License as published by the Free Software Foundation; either         * *  version 2.1 of the License, or any later version.                    * *                                                                       * *  See terms of license at gnu.org.                                     * *                                                                       * *************************************************************************/ /* * DNFieldExtractor.java * * Created on den 1 maj 2002, 07:09 */package se.anatom.ejbca.ra.raadmin;import java.util.ArrayList;import java.util.HashMap;import org.apache.log4j.Logger;import org.ietf.ldap.LDAPDN;/** * A class used to retrieve different fields from a Distiguished Name or Subject Alternate Name * strings. * * @author Philip Vendil * @version $Id: DNFieldExtractor.java,v 1.20 2004/05/30 17:44:09 herrvendil Exp $ */public class DNFieldExtractor {    private static Logger log = Logger.getLogger(DNFieldExtractor.class);    // Public constants    public static final int TYPE_SUBJECTDN = 0;    public static final int TYPE_SUBJECTALTNAME = 1;    // Subject DN Fields.    public static final int E = 0;    public static final int UID = 1;    public static final int CN = 2;    public static final int SN = 3;    public static final int GIVENNAME = 4;    public static final int INITIALS = 5;    public static final int SURNAME = 6;    public static final int T = 7;    public static final int OU = 8;    public static final int O = 9;    public static final int L = 10;    public static final int ST = 11;    public static final int DC = 12;    public static final int C = 13;    public static final int UNSTRUCTUREDADDRESS = 14;    public static final int UNSTRUCTUREDNAME = 15;        // Subject Alternative Names.    public static final int OTHERNAME = 16;    public static final int RFC822NAME = 17;    public static final int DNSNAME = 18;    public static final int IPADDRESS = 19;    public static final int X400ADDRESS = 20;    public static final int DIRECTORYNAME = 21;    public static final int EDIPARTNAME = 22;    public static final int URI = 23;    public static final int REGISTEREDID = 24;    public static final int UPN = 25;    public static final int GUID = 26;    public static final int SUBJECTALTERNATIVENAMEBOUNDRARY = 16;    public static final int NUMBEROFFIELDS = 27;    public static final String[] SUBJECTDNFIELDS = {        "E=", "UID=", "CN=", "SN=", "GIVENNAME=", "INITIALS=", "SURNAME=", "T=", "OU=", "O=", "L=",        "ST=", "DC=", "C=", "1.2.840.113549.1.9.8=", "1.2.840.113549.1.9.2="    };        public static final String[] SUBJECTALTNAME = {        "OTHERNAME=", "RFC822NAME=", "DNSNAME=", "IPADDRESS=", "X400ADDRESS=", "DIRECTORYNAME=",        "EDIPARTNAME=", "UNIFORMRESOURCEIDENTIFIER=", "REGISTEREDID=", "UPN=",  "GUID="    };    // Constants used with field ordering    public static final int FIELDTYPE = 0;    public static final int NUMBER = 1;    /**     * Creates a new instance of DNFieldExtractor     *     * @param dn DOCUMENT ME!     * @param type DOCUMENT ME!     */    public DNFieldExtractor(String dn, int type) {        dnfields = new HashMap();        setDN(dn, type);    }    /**     * DOCUMENT ME!     *     * @param dn DOCUMENT ME!     * @param type DOCUMENT ME!     */    public void setDN(String dn, int type) {    	        String[] fields;        this.type = type;                        if (type == TYPE_SUBJECTDN) {        	            fieldnumbers = new int[SUBJECTDNFIELDS.length];            fields = SUBJECTDNFIELDS;        } else {            fieldnumbers = new int[SUBJECTALTNAME.length];            fields = SUBJECTALTNAME;        }        if ((dn != null) && !dn.equalsIgnoreCase("null")) {            this.dn = dn;            dnfields = new HashMap();            try {                String[] dnexploded = LDAPDN.explodeDN(dn, false);                for (int i = 0; i < dnexploded.length; i++) {                    boolean exists = false;                                        for (int j = 0; j < fields.length; j++) {                        if (dnexploded[i].toUpperCase().startsWith(fields[j])) {                            exists = true;                            String rdn = LDAPDN.unescapeRDN(dnexploded[i]);                            if (type == TYPE_SUBJECTDN) {                                dnfields.put(new Integer((j * BOUNDRARY) + fieldnumbers[j]), rdn);                            } else {                                dnfields.put(new Integer(((j + SUBJECTALTERNATIVENAMEBOUNDRARY) * BOUNDRARY) +                                        fieldnumbers[j]), rdn);                            }                            fieldnumbers[j]++;                        }                    }                    if (!exists) {                        existsother = true;                    }                }            } catch (Exception e) {            	log.error("setDN: ", e);				illegal = true;                if (type == TYPE_SUBJECTDN) {                    dnfields.put(new Integer((CN * BOUNDRARY)), "Illegal DN : " + dn);                } else {                    dnfields.put(new Integer(                            ((RFC822NAME + SUBJECTALTERNATIVENAMEBOUNDRARY) * BOUNDRARY)),                        "Illegal Subjectaltname : " + dn);                }            }        } else {            this.dn = null;        }    }    /**     * DOCUMENT ME!     *     * @return DOCUMENT ME!     */    public String getDN() {        return dn;    }    /**     * DOCUMENT ME!     *     * @param field DOCUMENT ME!     * @param number DOCUMENT ME!     *     * @return DOCUMENT ME!     */    public String getField(int field, int number) {        String returnval;        returnval = (String) dnfields.get(new Integer((field * BOUNDRARY) + number));        if (returnval == null) {            returnval = "";        }        return returnval;    }    /**     * Function that returns true if non standard DN field exists id dn string.     *     * @return DOCUMENT ME!     */    public boolean existsOther() {        return existsother;    }    /**     * Returns the number of one kind of dn field.     *     * @param field DOCUMENT ME!     *     * @return DOCUMENT ME!     */    public int getNumberOfFields(int field) {        int returnval = 0;        if (type == TYPE_SUBJECTDN) {            returnval = fieldnumbers[field];        } else {            returnval = fieldnumbers[field - OTHERNAME];        }        return returnval;    }    /**     * Returns the total number of fields in dn or subject alternative name. Primary use is when     * checking user data with it's end entity profile.     *     * @return DOCUMENT ME!     */    public int getFieldOrderLength() {        return fieldorder.size();    }    /**     * Function that returns the field with given index in original dn field. Primary use is when     * checking user data with it's end entity profile.     *     * @param index DOCUMENT ME!     *     * @return An array of integers with the size of two, the first (0) indicating the type of     *         field, the second (1) the current number of the field.     */    public int[] getFieldsInOrder(int index) {        int[] returnval = new int[2];        returnval[FIELDTYPE] = ((Integer) fieldorder.get(index)).intValue() / BOUNDRARY;        returnval[NUMBER] = ((Integer) fieldorder.get(index)).intValue() % BOUNDRARY;        return returnval;    }    /**     * DOCUMENT ME!     *     * @return DOCUMENT ME!     */    public int[] getNumberOfFields() {        return fieldnumbers;    }    public boolean isIllegal(){    	return illegal;    }    private static final int BOUNDRARY = 100;    private int[] fieldnumbers;    private HashMap dnfields;    private ArrayList fieldorder;    private String dn;    private boolean existsother = false;    private boolean illegal = false;    int type;}

⌨️ 快捷键说明

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