发送激活码确认
??? 一、需求
???????? 最近做某項目的用戶管理(權限)模塊,有一種情況,是管理員從后臺導入一批用戶到DB中,導入后需要通知用戶,已經為他分配了用戶名和密碼,通過Email發送郵件,并讓他激活,激活的過程要更新用戶信息,當然,一般激活都有分一、二、三步了,再此不細說,主要是講一下發送激活碼、以及對方從EMAIL中的激的思路。
??????? 數據庫中需要接增加的字段“激活碼” “激活碼是否發送標志” “是否激活標志”
?
??? 二、思路
?? 總體來說,有以下幾步組成.
?? (1)生成激活碼,存入庫中,可以通過MD5加密生成。
?? (2)發送EMAIL 給用戶,將激活碼發過去。(當然,每個用戶的激活碼是唯一的)
?? (3)用戶從EMAIL中點擊鏈接登錄action,在action 中通過激活碼(sign)來讀取用戶信息。
?
if(searchMemberBySign(sign)==null) {message="無效激活碼"return;} else{ if(是否已經激活==是){message="已經激活";return;}else{激活步驟一;激活步驟二;激活步驟三; 激活成員則置激活標志為true(防止重復激活)}}?
三、技術
?
?? MD5加密我是用的apache公司commons系列的codec包,最近超迷apache家的東東,確實很不錯,封裝了SHA1、MD5、BASE64的加蜜算法,而且特別好用,一句話搞定。
?
使用commons-codec包加密字符串(MD5,SHA1,BASE64)
?commons-codec包可以從apache下載,最新版是1.3
不可逆算法
1.MD5
String str = "abc"; DigestUtils.md5Hex(str);?
?
2.SHA1
String str = "abc"; DigestUtils.shaHex(str); 附.net生成SHA1的方式,生成內容跟java一致:String str = "abc"; FormsAuthentication.HashPasswordForStoringInConfigFile(str, "SHA1"); ??
可逆算法
常規加密解密算法:BASE64
//加密String str= "abc"; // abc為要加密的字符串 byte[] b = Base64.encodeBase64(str.getBytes(), true); System.out.println(new String(b)); //解密String str = "YWJj"; // YWJj為要解密的字符串 byte[] b = Base64.decodeBase64(str.getBytes()); System.out.println(new String(b));?
?發送EMAIL,我也選用了apache 的commons.mail 包封裝的部分,非常簡單。直接寫代碼:
?
?
package com.smartdot.cbice.member.util;import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import org.apache.commons.mail.SimpleEmail;import com.smartdot.cbice.member.bean.MemberBean;/*@author:duanqf*/ public class MemberUtils {public static void sendEmail(MemberBean memberBean, String path)throws EmailException {HtmlEmail email = new HtmlEmail(); // 發送HTML形式的郵件// SimpleEmail email = new SimpleEmail();email.setHostName(SMTP);// 郵件服務器email.setAuthentication(HOST_MAIL_NAME, HOST_MAIL_PASSWORD);// smtp認證的用戶名和密碼email.addTo(memberBean.getEmail(), memberBean.getMemberName());// 收信者email.setFrom(sender, "國際版權交易中心");// 發信者email.setSubject("國際版權交易中心激活郵件");// 標題email.setCharset("GBK");// 編碼格式// 郵件內容email.setHtmlMsg("你好:<br> 國際版權中心會員激活郵件,請你點擊<a href='" + path+ "'>版權交易中心激活</a>進行激活!<br><div align='right'>國際版權交易中心</div> ");// email.setMsg("<a href='www.baidu.com'>");// 內容email.send();// 發送}/*** 發送郵件的用戶名*/public static String HOST_MAIL_NAME = "qingfeng_825";/*** 發送郵件的密碼*/public static String HOST_MAIL_PASSWORD = "XXXXX";/*** 郵件發送協議*/public static String SMTP = "smtp.163.com";/*** 發送人*/public static String sender = "qingfeng_825@163.com";}?注釋寫得很清楚了,就不用細解釋了。
?
最后附上我上面提到的包
總結
- 上一篇: 权限管理设计二
- 下一篇: ob 接oracle10时接不上怎么办?