java åºäºspringbooté®ç®±æ¾åå¯ç åè½
ä¸ã主è¦å 容
åºäºspringbootå®ç°å¯ç æ¾ååè½ã
äºãé®ç®±æ¾åå¯ç çææ³ã
1.è¾å ¥æ³¨åé®ç®±ï¼ç¹å»è·åéªè¯ç ãä¼å°éªè¯ç åéå°é®ç®±ã
2.ç¨æ·è¿å ¥é®ç®±ï¼æ¥çéªè¯ç ã
3.ç¨æ·è¾å ¥éªè¯ç ï¼è¾å ¥æ°å¯ç ï¼ç¹å»ä¿®æ¹å¯ç ï¼å®æä¿®æ¹ã
ä¸ãåå°é¡µé¢
åãæ³¨æäºé¡¹
妿æ¯163æè qqé®ç®±éè¦æå¼ææï¼ä»¥163为ä¾ï¼
妿æ¯é¿éçä¼ä¸é®ç®±ï¼åä¸ç¨æå¼
äºãé¨åå®ç°ä»£ç
pom.xml æ·»å ä¾èµ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.properties é ç½®æä»¶
#è¿é使ç¨çæ¯é¿éä¼ä¸é®ç®±
spring.mail.host=smtp.qiye.aliyun.com
spring.mail.username=****@XXXX.com
spring.mail.password=123456
5.1 页é¢ä»£ç
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="expires" content="0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta charset="UTF-8" />
<title>éç½®å¯ç </title>
</head>
<body>
<div class="login-bg"></div>
<div class="login-box-reset-pss">
<div class="logbox-left-pss fl">
<div class="logbox-logos-pss">
<img class="sch-logo" src="/images/login_logo.png" alt="" onerror="javascript:this.src='/images/login_logo.png'" />
</div>
</div>
<div class="logbox-right fr">
<div class="title">éç½®å¯ç </div>
<div class="inputbar">
<input type="text" class="form-control-reset-pss" id="loginNameReset" placeholder="é®ç®±">
</div>
<div class="inputbar">
<input type="text" class="form-control-reset-pss" id="verificationCode" placeholder="éªè¯ç ">
<span class="js-reset-captcha btn-captcha" id="btn-captcha">è·åéªè¯ç </span>
</div>
<div class="inputbar">
<input type="password" class="form-control-reset-pss" id="newLoginPwd" placeholder="æ°å¯ç ">
</div>
<div class="inputbar">
<input type="password" class="form-control-reset-pss" id="confirmloginPwd" placeholder="确认æ°å¯ç ">
</div>
<div class="logbtn"><button type="button" class="fl btn" id="loginIdReset" style="width:100%;height:100%;">ä¿å</button></div>
<div class="logbox-error" style="display:;">æ¨è¾å
¥çç¨æ·åæå¯ç æè¯¯ï¼è¯·éæ°è¾å
¥ï¼</div>
</div>
</div>
</body>
5.2 åééªè¯ç å°æ³¨åé®ç®±ç代ç
åå°ä»£ç ï¼
/**
* è·åéªè¯ç
*/
$el_btnVc.on('click', function(){
var data = {
loginNameReset: $.trim($el_loginReset.val())
}
if(MC.isEmpty(data.loginNameReset)){
return msg_fn('请è¾å
¥æ¨çç¨æ·åï¼');
}
if (data.loginNameReset.indexOf('.com') > 0 || data.loginNameReset.indexOf('.cn') > 0){
if (!reg_mail.test(data.loginNameReset)){
return msg_fn('请æ¨è¾å
¥æ£ç¡®çé®ç®±ï¼');
}
data.resetType = '1';
} else {
if (data.loginNameReset.length != 11){
return msg_fn('请æ¨è¾å
¥æ£ç¡®çææºå·ï¼');
}
data.resetType = '0';
}
// verificationMailOrPhone(data);
reset_getCode(data);
});
/**
* è·åéç½®å¯ç çéªè¯ç
* @param data
*/
var reset_getCode = function(data){
$.ajax({
url: window.mcConfig.DATA_HOST,
type: 'post',
dataType: 'json',
// async: false,
data: {
eventType: "web.teacher.user.resetPassword.code",
entity: MC.json.encode(data)
},
success: function(rsp) {
if (parseInt(rsp.err) == 0) {
// window.location.href = data.callback + rsp.code;
MC.msg('info', 'éªè¯ç å·²ç»åéæåï¼');
} else {
msg_fn(rsp.errMsg || 'æ¨è¾å
¥çç¨æ·åæå¯ç æè¯¯ï¼è¯·éæ°è¾å
¥ï¼');
}
},
error: function(response) {
if (!response.error) {
MC.msg('alert', "ç³»ç»åå°å¼å¸¸,请ä¸ç®¡çåèç³»!", 'warn');
}
}
});
};
åå°ä»£ç ï¼
controllerå±
/**
* è·åéç½®å¯ç çéªè¯ç
* @param entity
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/getCode", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, Object> getCode(String entity, HttpServletRequest request, HttpServletResponse response) throws MessagingException {
return userService.getCode(JsonUtil.jsonToMap(entity)).toMap(setting);
}
serviceå±ï¼
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String mailUserName;
/**
* è·åéç½®å¯ç éè¦çéªè¯ç
* @param map
* @return
*/
public ProcResult getCode(Map<String, Object> map) throws MessagingException {
String loginNameReset = StringUtil.toString(map.get("loginNameReset")).trim();
if (StringUtil.isEmpty(loginNameReset)){
return ProcResult.error(ErrorCode.USER_LOGIN_NAME_EMPTY);
}
List<Teacher> list = getTeacherByMailOrPhoneNumber(loginNameReset,map.get("resetType").toString());
if (list == null || list.size() == 0) {
return ProcResult.error(ErrorCode.LOGIN_USER_NOT_EXISTS_ERROR);
}
if (list.size() > 1) {
return ProcResult.error(ErrorCode.USER_NOT_ONE_ERROR);
}
Teacher teacher = list.get(0);
String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);//çæçä¿¡éªè¯ç
Timestamp outDate = new Timestamp(System.currentTimeMillis() + 5 * 60 * 1000);// 5åéåè¿æ
//å°éªè¯ç å è¿ææ¶é´æ´æ°å°æ°æ®åº
teacher.setCodeExpiredTime(outDate);
teacher.setValidataCode(verifyCode);
teacherDao.update(teacher);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<html><head><title></title></head><body>");
stringBuilder.append("æ¨å¥½<br/>");
stringBuilder.append("æ¨çéªè¯ç æ¯ï¼").append(verifyCode).append("<br/>");
stringBuilder.append("æ¨å¯ä»¥å¤å¶æ¤éªè¯ç å¹¶è¿åè³XXXï¼ä»¥éªè¯æ¨çé®ç®±ã<br/>");
stringBuilder.append("æ¤éªè¯ç åªè½ä½¿ç¨ä¸æ¬¡ï¼å¨5åéå
ææãéªè¯æååèªå¨å¤±æã<br/>");
stringBuilder.append("å¦ææ¨æ²¡æè¿è¡ä¸è¿°æä½ï¼è¯·å¿½ç¥æ¤é®ä»¶ã");
MimeMessage mimeMessage = mailSender.createMimeMessage();
//åééªè¯ç å°ææºæè
æ¯é®ç®±
if ("1".equals(map.get("resetType"))){ //é®ç®±
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(mailUserName);//è¿éåªæ¯è®¾ç½®username 并没æè®¾ç½®hoståpasswordï¼å 为hoståpasswordå¨springbootå¯å¨å建JavaMailSenderå®ä¾çæ¶åå·²ç»è¯»åäº
mimeMessageHelper.setTo(loginNameReset);
mimeMessage.setSubject("é®ç®±éªè¯-XXX");
mimeMessageHelper.setText(stringBuilder.toString(),true);
mailSender.send(mimeMessage);
}else if ("0".equals(map.get("resetType"))){ //ææº
}
return ProcResult.success();
}
é®ç®±æªå¾ï¼
5.3 ä¿®æ¹å¯ç
åå°ä»£ç ï¼
/**
* lpw
* éç½®å¯ç ç»å½æä½
*/
$el_btnRt.on('click', function(){
var reg_mail = /^([a-zA-Z0-9_-])[email protected]([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;//é®ç®±æ ¼å¼æ¯å¦æ£ç¡®
var data = {
loginNameReset: $.trim($el_loginReset.val()),
newPassword : $.trim($el_npwd.val()),
confirmNewPassword : $.trim($el_cnpwd.val()),
verificationCode : $.trim($el_vc.val())
}
if(MC.isEmpty(data.loginNameReset)){
return msg_fn('请è¾å
¥æ¨çç¨æ·åï¼');
}
if(MC.isEmpty(data.verificationCode)){
return msg_fn('请è¾å
¥éªè¯ç ï¼');
}
if (data.loginNameReset.indexOf('.com') > 0 || data.loginNameReset.indexOf('.cn') > 0){
if (!reg_mail.test(data.loginNameReset)){
return msg_fn('请æ¨è¾å
¥æ£ç¡®çé®ç®±ï¼');
}
data.resetType = '1';
} else {
if (data.loginNameReset.length != 11){
return msg_fn('请æ¨è¾å
¥æ£ç¡®çææºå·ï¼');
}
data.resetType = '0';
}
if(MC.isEmpty(data.newPassword)){
return msg_fn('请è¾å
¥æ¨çæ°å¯ç ï¼');
}
if(MC.isEmpty(data.confirmNewPassword)){
return msg_fn('请确认æ¨çæ°å¯ç ï¼');
}
if(data.confirmNewPassword != data.newPassword){
return msg_fn('两次è¾å
¥çå¯ç ä¸ä¸è´ï¼');
}
MC.require('md5', function(exports){
data.newPassword = hex_md5(data.newPassword);
data.confirmNewPassword = hex_md5(data.confirmNewPassword);
reset_PassWord(data);
});
});
/**
* ä¿®æ¹å¯ç
* @param data
*/
var reset_PassWord = function(data){
$.ajax({
url: window.mcConfig.DATA_HOST,
type: 'post',
dataType: 'json',
// async: false,
data: {
eventType: "web.teacher.user.resetPassword.resetPassword",
entity: MC.json.encode(data)
},
success: function(rsp) {
if (parseInt(rsp.err) == 0) {
MC.msg('info', 'å¯ç ä¿®æ¹æå,è¯·éæ°ç»å½ï¼');
} else {
msg_fn(rsp.errMsg || 'æ¨è¾å
¥çç¨æ·åæéªè¯ç æè¯¯ï¼è¯·éæ°è¾å
¥ï¼');
}
},
error: function(response) {
if (!response.error) {
MC.msg('alert', "ç³»ç»åå°å¼å¸¸,请ä¸ç®¡çåèç³»!", 'warn');
}
}
});
};
controllerå±ï¼
/**
* ä¿®æ¹å¯ç
* @param entity
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/resetPassword", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public Map<String, Object> resetPassword(String entity, HttpServletRequest request, HttpServletResponse response) {
return userService.resetPassword(JsonUtil.jsonToMap(entity)).toMap(setting);
}
serviceå±ï¼
/**
* éæ°è®¾ç½®å¯ç
* @param map
* @return
*/
public ProcResult resetPassword(Map<String, Object> map) {
String loginNameReset = StringUtil.toString(map.get("loginNameReset")).trim();
if (StringUtil.isEmpty(loginNameReset)){
return ProcResult.error(ErrorCode.USER_LOGIN_NAME_EMPTY);
}
String newPassword = StringUtil.toString(map.get("newPassword")).trim();
if (StringUtils.isEmpty(newPassword)) {
return ProcResult.error(ErrorCode.USER_PASSWORD_EMPTY);
}
String verificationCode = StringUtil.toString(map.get("verificationCode")).trim();
if (StringUtils.isEmpty(verificationCode)) {
return ProcResult.error(ErrorCode.VERIFICATION_CODE_EMPTY);
}
List<Teacher> list = getTeacherByMailOrPhoneNumber(loginNameReset,map.get("resetType").toString());
if (list == null || list.size() == 0) {
return ProcResult.error(ErrorCode.LOGIN_USER_NOT_EXISTS_ERROR);
}
if (list.size() > 1) {
return ProcResult.error(ErrorCode.USER_NOT_ONE_ERROR);
}
Teacher teacher = list.get(0);
if (teacher.getValidataCode() == null || "".equals(teacher.getValidataCode())){
return ProcResult.error(ErrorCode.VERIFICATION_CODE_EMPTY);
}
//夿éªè¯ç æ¯å¦è¿ææ
Date codeExpiredTime = teacher.getCodeExpiredTime();
Date date = new Date();
if (date.getTime() > codeExpiredTime.getTime() || "0".equals(teacher.getValidataCode())){
return ProcResult.error(ErrorCode.VERIFICATION_CODE_INVALID);
}
//夿éªè¯ç æ¯å¦æ£ç¡®
if (!verificationCode.equals(teacher.getValidataCode())){
return ProcResult.error(ErrorCode.VERIFICATION_CODE_ERROR);
}
//éè¿ç¨æ·noæ¥è¯¢userä¿¡æ¯
QueryConds queryConds = new QueryConds();
queryConds.cond("userNo", teacher.getUserNo(), QueryOp.EQUAL);
queryConds.cond("del", ECommon.NO_DEL);
List<User> listUser = userDao.findUserByConds(queryConds);
if (listUser == null || listUser.size() == 0) {
return ProcResult.error(ErrorCode.LOGIN_USER_NOT_EXISTS_ERROR);
}
if (listUser.size() > 1) {
return ProcResult.error(ErrorCode.USER_NOT_ONE_ERROR);
}
User user = listUser.get(0);
//ä¿®æ¹å¯ç
user.setPassword(newPassword);
user.setUpdateTime(date);
userDao.update(user);
//失æå½åéªè¯ç
teacher.setValidataCode("0");
teacher.setUpdateTime(date);
teacherDao.update(teacher);
return ProcResult.success();
}
OKï¼è³æ¤ï¼é®ç®±ä¿®æ¹å¯ç åè½å°±å®æäºã
æ»ç»
å¨ä¸ä½¿ç¨spring-boot-starter-mailåéé®ä»¶çæ¶åï¼éè¦å¨ä»£ç ä¸è®¾ç½®hoståpassword
spring-boot-starter-mailåªéè¦å¨é ç½®æä»¶ä¸é ç½®ï¼å¨å¯å¨springbootçä¼å»é ç½®æä»¶è¯»åhoståpassword屿§ãä¸éè¦å代ç 䏿¾æ§è®¾ç½®ã妿ä¸é ç½®springbootå¯å¨ä¼æ¥éï¼
#è¿é使ç¨çæ¯é¿éä¼ä¸é®ç®±
spring.mail.host=smtp.qiye.aliyun.com
spring.mail.username=****@XXXX.com
spring.mail.password=123456