james用編碼實現使用者的新增
阿新 • • 發佈:2018-11-09
james用編碼實現使用者的新增
要想實現郵箱使用者的新增,可以通過命令列的方式新增adduser username password
下面要講的是通過資料庫表的操作來新增。
可以先回顧下之前講過的james用資料庫mail來儲存的使用者表的配置
https://blog.csdn.net/xiao__jia__jia/article/details/83619545
實現:
先下載james官網的原始碼,
https://download.csdn.net/download/afgasdg/3270947
(需要三積分)下載完進入解壓目錄
apache-james-2.3.2\src\java\org\apache\james\security找到那個類,可以不下載的,我把這個類黏貼出來
/**************************************************************** * 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 com.hstc.bean; import javax.mail.MessagingException; import javax.mail.internet.MimeUtility; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Locale; /** * Computes and verifies digests of files and strings * * * @version $Revision: 494012 $ * james原始碼的郵箱密碼加密類 */ public class DigestUtil { /** * Command line interface. Use -help for arguments. * * @param args the arguments passed in on the command line */ public static void main(String[] args) { String alg = "SHA"; boolean file = false; if (args.length == 0 || args.length > 4) { printUsage(); return; } for (int i = 0; i < args.length; i++) { String currArg = args[i].toLowerCase(Locale.US); if (currArg.equals("-help") || currArg.equals("-usage")) { printUsage(); return; } if (currArg.equals("-alg")) { alg = args[i+1]; } if (currArg.equals("-file")) { file = true; } } if (file) { digestFile(args[args.length - 1], alg); return ; } else { try { String hash = digestString(args[args.length - 1], alg); System.out.println("Hash is: " + hash); return; } catch (NoSuchAlgorithmException nsae) { System.out.println("No such algorithm available"); } } } /** * Print the command line usage string. */ public static void printUsage() { System.out.println("Usage: " + "java org.apache.james.security.DigestUtil" + " [-alg algorithm]" + " [-file] filename|string"); } /** * Calculate digest of given file with given algorithm. * Writes digest to file named filename.algorithm . * * @param filename the String name of the file to be hashed * @param algorithm the algorithm to be used to compute the digest */ public static void digestFile(String filename, String algorithm) { byte[] b = new byte[65536]; int count = 0; int read = 0; FileInputStream fis = null; FileOutputStream fos = null; try { MessageDigest md = MessageDigest.getInstance(algorithm); fis = new FileInputStream(filename); while (fis.available() > 0) { read = fis.read(b); md.update(b, 0, read); count += read; } byte[] digest = md.digest(); StringBuffer fileNameBuffer = new StringBuffer(128) .append(filename) .append(".") .append(algorithm); fos = new FileOutputStream(fileNameBuffer.toString()); OutputStream encodedStream = MimeUtility.encode(fos, "base64"); encodedStream.write(digest); fos.flush(); } catch (Exception e) { System.out.println("Error computing Digest: " + e); } finally { try { fis.close(); fos.close(); } catch (Exception ignored) {} } } /** * Calculate digest of given String using given algorithm. * Encode digest in MIME-like base64. * * @param pass the String to be hashed * @param algorithm the algorithm to be used * @return String Base-64 encoding of digest * * @throws NoSuchAlgorithmException if the algorithm passed in cannot be found */ public static String digestString(String pass, String algorithm ) throws NoSuchAlgorithmException { MessageDigest md; ByteArrayOutputStream bos; try { md = MessageDigest.getInstance(algorithm); byte[] digest = md.digest(pass.getBytes("iso-8859-1")); bos = new ByteArrayOutputStream(); OutputStream encodedStream = MimeUtility.encode(bos, "base64"); encodedStream.write(digest); return bos.toString("iso-8859-1"); } catch (IOException ioe) { throw new RuntimeException("Fatal error: " + ioe); } catch (MessagingException me) { throw new RuntimeException("Fatal error: " + me); } } /** * Private constructor to prevent instantiation of the class */ private DigestUtil() {} }
最後只要把我想要新增的使用者的密碼進行加密,並且插入資料庫的user表中就算成功新增一個使用者賬號了
String password = DigestUtil.digestString("xiancai", "SHA");
以上就完成了使用者的新增,挺簡單的
所以類似使用者的刪除,也可以操作資料庫的user表了,不過還得考慮一點,刪除使用者賬號時,需要先刪除使用者賬號下的所有的郵件,然後再操作資料庫,這樣就避免垃圾資料堆積在james伺服器中了(想法很天真,水平有限,不知道對錯,勿懟)。