UserSecurityController.java 4.2 KB
Newer Older
深度学习从入门到放弃's avatar
注释  
深度学习从入门到放弃 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
package com.kanlon.cfile.controller;

import com.kanlon.cfile.dao.mapper.TeacherUserMapper;
import com.kanlon.cfile.domain.po.TeacherUserPO;
import com.kanlon.cfile.utli.Constant;
import com.kanlon.cfile.utli.JsonResult;
import com.kanlon.cfile.utli.MailUtil;
import com.kanlon.cfile.utli.TimeUtil;
import com.kanlon.cfile.utli.captcha.Captcha;
import com.kanlon.cfile.utli.captcha.CaptchaUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

/**
 * 用户的安全控制类
 *
 * @author zhangcanlong
 * @date 2018年12月27日
 */
@Slf4j
@Controller
@RequestMapping("/security")
public class UserSecurityController {

    @Resource
    private TeacherUserMapper userMapper;
    @Resource
    private HttpSession session;
    @Resource
    private MailUtil mailUtil;

    /**
     * 发送给新邮箱验证码
     *
     * @param newEmail 新邮箱
     * @return 是否成功
     */
    @GetMapping(value = "/new/email/captcha")
    public JsonResult<String> sendNewEmailCaptcha(String newEmail) {
        JsonResult<String> result = new JsonResult<>();
        Captcha captcha = CaptchaUtil.create();
        String code = captcha.getCode().toLowerCase();
        log.info(code);
        // 十分钟有效,存放,code#currenttime
        session.setAttribute(Constant.SESSION_MODIFY_EMAIL_CAPTCHA, code + "#" + System.currentTimeMillis());
        // 发送邮箱
        try {
            mailUtil.sendHtmlMail(newEmail, "修改邮箱验证码", "修改邮箱验证码为(十分钟内有效):<br/>" + code);
        } catch (Exception e) {
            log.error(e.getMessage());
            result.setStateCode(Constant.RESPONSE_ERROR, "发送邮件时发生异常");
            return result;
        }
        return result;
    }

    /**
     * 修改邮箱
     *
     * @param email   邮箱地址
     * @param captcha 验证码信息
     * @return 是否成功
     */
    @PutMapping(value = "/new/email")
    public JsonResult<String> modifyEmail(String email, String captcha) {
        JsonResult<String> result = new JsonResult<>();
        try {
            String codeAndTime = (String) session.getAttribute(Constant.SESSION_MODIFY_EMAIL_CAPTCHA);
            if (codeAndTime == null) {
                result.setStateCode(Constant.REQUEST_ERROR, "还没发送验证码");
                return result;
            }
            String sessionCaptcha = codeAndTime.split("#")[0];
            long createCaptchaTime = Long.parseLong(codeAndTime.split("#")[1]);
            if (!sessionCaptcha.equals(captcha)) {
                result.setStateCode(Constant.REQUEST_ERROR, "验证码错误");
                return result;
            } else if (createCaptchaTime + TimeUtil.TEN_MINUTE < System.currentTimeMillis()) {
                result.setStateCode(Constant.REQUEST_ERROR, "验证码过期了");
                return result;
            }
            TeacherUserPO oldUser = (TeacherUserPO) session.getAttribute(Constant.SESSION_USER);
            TeacherUserPO emailModifyUser = new TeacherUserPO();
            emailModifyUser.setEmail(email);
            emailModifyUser.setUid(oldUser.getUid());
            userMapper.updateUserOneByKey(emailModifyUser);
        } catch (Exception e) {
            log.error("修改邮箱异常", e);
            result.setStateCode(Constant.RESPONSE_ERROR, "修改邮箱错误!" + e.getMessage());
        }
        return result;
    }

    /**
     * 修改密码
     *
     * @param newPassword 新的密码
     * @return 是否成功
     */
    @PutMapping(value = "/new/password")
    public JsonResult<String> modifyPassword(String newPassword) {
        JsonResult<String> result = new JsonResult<>();
        TeacherUserPO oldUser = (TeacherUserPO) session.getAttribute(Constant.SESSION_USER);
        TeacherUserPO passwordModifyUser = new TeacherUserPO();
        passwordModifyUser.setEmail(newPassword);
        passwordModifyUser.setUid(oldUser.getUid());
        userMapper.updateUserOneByKey(passwordModifyUser);
        return result;
    }

}