版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiao__jia__jia/article/details/83757648
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服务器中了(想法很天真,水平有限,不知道对错,勿怼)。