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

📄 verifyjar.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one or more *  contributor license agreements.  See the NOTICE file distributed with *  this work for additional information regarding copyright ownership. *  The ASF licenses this file to You under the Apache License, Version 2.0 *  (the "License"); you may not use this file except in compliance with *  the License.  You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, software *  distributed under the License is distributed on an "AS IS" BASIS, *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *  See the License for the specific language governing permissions and *  limitations under the License. * */package org.apache.tools.ant.taskdefs;import org.apache.tools.ant.Project;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.filters.ChainableReader;import org.apache.tools.ant.types.RedirectorElement;import org.apache.tools.ant.types.FilterChain;import org.apache.tools.ant.types.Path;import org.apache.tools.ant.types.resources.FileResource;import java.util.Iterator;import java.io.File;import java.io.Reader;import java.io.IOException;/** * JAR verification task. * For every JAR passed in, we fork jarsigner to verify * that it is correctly signed. This is more rigorous than just checking for * the existence of a signature; the entire certification chain is tested * @since Ant 1.7 */public class VerifyJar extends AbstractJarSignerTask {    /**     * no file message {@value}     */    public static final String ERROR_NO_FILE = "Not found :";    /**     * The string we look for in the text to indicate direct verification     */    private static final String VERIFIED_TEXT = "jar verified.";    /**     * certification flag     */    private boolean certificates = false;    private BufferingOutputFilter outputCache = new BufferingOutputFilter();    /** Error output if there is a failure to verify the jar. */    public static final String ERROR_NO_VERIFY = "Failed to verify ";    /**     * Ask for certificate information to be printed     * @param certificates if true print certificates.     */    public void setCertificates(boolean certificates) {        this.certificates = certificates;    }    /**     * verify our jar files     * @throws BuildException on error.     */    public void execute() throws BuildException {        //validation logic        final boolean hasJar = jar != null;        if (!hasJar && !hasResources()) {            throw new BuildException(ERROR_NO_SOURCE);        }        beginExecution();        //patch the redirector to save output to a file        RedirectorElement redirector = getRedirector();        redirector.setAlwaysLog(true);        FilterChain outputFilterChain = redirector.createOutputFilterChain();        outputFilterChain.add(outputCache);        try {            Path sources = createUnifiedSourcePath();            Iterator iter = sources.iterator();            while (iter.hasNext()) {                FileResource fr = (FileResource) iter.next();                verifyOneJar(fr.getFile());            }        } finally {            endExecution();        }    }    /**     * verify a JAR.     * @param jar the jar to verify.     * @throws BuildException if the file could not be verified     */    private void verifyOneJar(File jar) {        if (!jar.exists()) {            throw new BuildException(ERROR_NO_FILE + jar);        }        final ExecTask cmd = createJarSigner();        setCommonOptions(cmd);        bindToKeystore(cmd);        //verify special operations        addValue(cmd, "-verify");        if (certificates) {            addValue(cmd, "-certs");        }        //JAR  is required        addValue(cmd, jar.getPath());        log("Verifying JAR: " + jar.getAbsolutePath());        outputCache.clear();        BuildException ex = null;        try {            cmd.execute();        } catch (BuildException e) {            ex = e;        }        String results = outputCache.toString();        //deal with jdk1.4.2 bug:        if (ex != null) {            if (results.indexOf("zip file closed") >= 0) {                log("You are running " + JARSIGNER_COMMAND + " against a JVM with"                    + " a known bug that manifests as an IllegalStateException.",                    Project.MSG_WARN);            } else {                throw ex;            }        }        if (results.indexOf(VERIFIED_TEXT) < 0) {            throw new BuildException(ERROR_NO_VERIFY + jar);        }    }    /**     * we are not thread safe here. Do not use on multiple threads at the same time.     */    private static class BufferingOutputFilter implements ChainableReader {        private BufferingOutputFilterReader buffer;        public Reader chain(Reader rdr) {            buffer = new BufferingOutputFilterReader(rdr);            return buffer;        }        public String toString() {            return buffer.toString();        }        public void clear() {            if (buffer != null) {                buffer.clear();            }        }    }    /**     * catch the output of the buffer     */    private static class BufferingOutputFilterReader extends Reader {        private Reader next;        private StringBuffer buffer = new StringBuffer();        public BufferingOutputFilterReader(Reader next) {            this.next = next;        }        public int read(char[] cbuf, int off, int len) throws IOException {            //hand down            int result = next.read(cbuf, off, len);            //cache            buffer.append(cbuf, off, len);            //return            return result;        }        public void close() throws IOException {            next.close();        }        public String toString() {            return buffer.toString();        }        public void clear() {            buffer = new StringBuffer();        }    }}

⌨️ 快捷键说明

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