📄 smimesign.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.james.transport.mailets.smime;import org.apache.mailet.Mail;import javax.mail.MessagingException;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import java.io.IOException;/** * <p>Puts a <I>server-side</I> SMIME signature on a message.<br> * It is a concrete subclass of {@link SMIMEAbstractSign}, with very few modifications to it.</p> * <p>A text file with an explanation text is attached to the original message, * and the resulting message with all its attachments is signed. * The resulting appearence of the message is almost unchanged: only an extra attachment * and the signature are added.</p> * * <P>Handles the following init parameters (will comment only the differences from {@link SMIMEAbstractSign}):</P> * <ul> * <li><debug>.</li> * <li><keyStoreFileName>.</li> * <li><keyStorePassword>.</li> * <li><keyAlias>.</li> * <li><keyAliasPassword>.</li> * <li><keyStoreType>.</li> * <li><postmasterSigns>. The default is <CODE>true</CODE>.</li> * <li><rebuildFrom>. The default is <CODE>true</CODE>.</li> * <li><signerName>.</li> * <li><explanationText>. There is a default explanation string template in English, * displaying also all the headers of the original message (see {@link #getExplanationText}).</li> * </ul> * @version CVS $Revision: 494012 $ $Date: 2007-01-08 11:23:58 +0100 (Mo, 08 Jan 2007) $ * @since 2.2.1 */public class SMIMESign extends SMIMEAbstractSign { /** * Return a string describing this mailet. * * @return a string describing this mailet */ public String getMailetInfo() { return "SMIME Signature Mailet"; } /** * */ protected String[] getAllowedInitParameters() { String[] allowedArray = { "debug", "keyStoreFileName", "keyStorePassword", "keyStoreType", "keyAlias", "keyAliasPassword", "signerName", "postmasterSigns", "rebuildFrom", "explanationText" }; return allowedArray; } /* ******************************************************************** */ /* ****************** Begin of setters and getters ******************** */ /* ******************************************************************** */ /** * If the <CODE><explanationText></CODE> init parameter is missing * returns the following default explanation template string: * <pre><code> * The message this file is attached to has been signed on the server by * "[signerName]" <[signerAddress]> * to certify that the sender is known and truly has the following address (reverse-path): * [reversePath] * and that the original message has the following message headers: * * [headers] * * The signature envelopes this attachment too. * Please check the signature integrity. * * "[signerName]" <[signerAddress]> * </code></pre> */ public String getExplanationText() { String explanationText = super.getExplanationText(); if (explanationText == null) { explanationText = "The message this file is attached to has been signed on the server by\r\n" + "\t\"[signerName]\" <[signerAddress]>" + "\r\nto certify that the sender is known and truly has the following address (reverse-path):\r\n" + "\t[reversePath]" + "\r\nand that the original message has the following message headers:\r\n" + "\r\n[headers]" + "\r\n\r\nThe signature envelopes this attachment too." + "\r\nPlease check the signature integrity." + "\r\n\r\n" + "\t\"[signerName]\" <[signerAddress]>"; } return explanationText; } /** * If the <CODE><postmasterSigns></CODE> init parameter is missing sets it to <I>true</I>. */ protected void initPostmasterSigns() { setPostmasterSigns((getInitParameter("postmasterSigns") == null) ? true : new Boolean(getInitParameter("postmasterSigns")).booleanValue()); } /** * If the <CODE><rebuildFrom></CODE> init parameter is missing sets it to <I>true</I>. */ protected void initRebuildFrom() throws MessagingException { setRebuildFrom((getInitParameter("rebuildFrom") == null) ? true : new Boolean(getInitParameter("rebuildFrom")).booleanValue()); if (isDebug()) { if (isRebuildFrom()) { log("Will modify the \"From:\" header."); } else { log("Will leave the \"From:\" header unchanged."); } } } /* ******************************************************************** */ /* ****************** End of setters and getters ********************** */ /* ******************************************************************** */ /** * A text file with the massaged contents of {@link #getExplanationText} * is attached to the original message. */ protected MimeBodyPart getWrapperBodyPart(Mail mail) throws MessagingException, IOException { String explanationText = getExplanationText(); // if there is no explanation text there should be no wrapping if (explanationText == null) { return null; } MimeMessage originalMessage = mail.getMessage(); MimeBodyPart messagePart = new MimeBodyPart(); MimeBodyPart signatureReason = new MimeBodyPart(); String contentType = originalMessage.getContentType(); Object content = originalMessage.getContent(); if (contentType != null && content != null) { messagePart.setContent(content, contentType); } else { throw new MessagingException("Either the content type or the content is null"); } String headers = getMessageHeaders(originalMessage); signatureReason.setText(getReplacedExplanationText(getExplanationText(), getSignerName(), getKeyHolder().getSignerAddress(), mail.getSender().toString(), headers)); signatureReason.setFileName("SignatureExplanation.txt"); MimeMultipart wrapperMultiPart = new MimeMultipart(); wrapperMultiPart.addBodyPart(messagePart); wrapperMultiPart.addBodyPart(signatureReason); MimeBodyPart wrapperBodyPart = new MimeBodyPart(); wrapperBodyPart.setContent(wrapperMultiPart); return wrapperBodyPart; } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -