SpringBoot Session详解及做验证码发送

不得不说,Session相对保存一些数据比cookie安全,但是一般都用于保存验证码,session通俗的讲就是 会话,数据都是保存在后端的,所以安全

@GetMapping("/setSessoin")
public void setSessoin(HttpServletRequest request){
    HttpSession session = request.getSession();
    session.setAttribute("title","我是session里的");
}

@GetMapping("/getSessoin")
public void getSessoin(HttpServletRequest request){
    HttpSession session = request.getSession();
    System.out.println(session.getAttribute("title"));
}

邮箱验证码获取:

@GetMapping("/code")
    public String code(HttpServletRequest request){
        HttpSession session = request.getSession();
        long result = 0;
        if(session.getAttribute("date") != null){
            result = (System.currentTimeMillis() / 1000) - Long.parseLong(session.getAttribute("date").toString());
        }
        System.out.println("当前验证已过:"+result+"秒");
        String code = "";
        if(session.getAttribute("date") == null || result >= 60){
            for (int i = 0; i < 6; i++) {
                code += new Random().nextInt(10);
            }
            // 验证码
            session.setAttribute("code",code);

            // 生成时间
            session.setAttribute("date",System.currentTimeMillis() / 1000);
            return "您的验证码是:"+code;
        }

        return "有效期60秒,验证还在有效期!";
    }

    @GetMapping("/verify")
    public String verify(HttpServletRequest request,String code){
        HttpSession session = request.getSession();
        if(session.getAttribute("date") != null){
            long result = (System.currentTimeMillis() / 1000) - Long.parseLong(session.getAttribute("date").toString());
            System.out.println("算出来的result:"+result);
            if(result <= 60){
                if(session.getAttribute("code").toString().equals(code)){
                    return "验证码正确!";
                }else{
                    return "验证码不正确!";
                }
            }else{
                return "验证码已过期!请重新获取!";
            }
        }
        return "未获取验证码!";
    }

配一个验证码发送的Html邮件模板,简直无敌呀

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>重置您的 无敌软件的 密码</title>

  <style>
    body,html,div,ul,li,button,p,img,h1,h2,h3,h4,h5,h6 {
      margin: 0;
      padding: 0;
    }

    body,html {
      background: #fff;
      line-height: 1.8;
    }

    h1,h2,h3,h4,h5,h6 {
      line-height: 1.8;
    }

    .email_warp {
      height: 100vh;
      min-height: 500px;
      font-size: 14px;
      color: #212121;
      display: flex;
      /* align-items: center; */
      justify-content: center;
    }

    .logo {
      margin: 3em auto;
      width: 200px;
      height: 60px;
    }

    h1.email-title {
      font-size: 26px;
      font-weight: 500;
      margin-bottom: 15px;
      color: #252525;
    }

    a.links_btn {
      border: 0;
      background: #4C84FF;
      color: #fff;
      width: 100%;
      height: 50px;
      line-height: 50px;
      font-size: 16px;
      margin: 40px auto;
      box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.15);
      border-radius: 4px;
      outline: none;
      cursor: pointer;
      transition: all 0.3s;
      text-align: center;
      display: block;
      text-decoration: none;
    }

    .warm_tips {
      color: #757575;
      background: #f7f7f7;
      padding: 20px;
    }

    .warm_tips .desc {
      margin-bottom: 20px;
    }

    .qr_warp {
      max-width: 140px;
      margin: 20px auto;
    }

    .qr_warp img {
      max-width: 100%;
      max-height: 100%;
    }

    .email-footer {
      margin-top: 2em;
    }

    #reset-password-email {
      max-width: 500px;
    }
    #reset-password-email .accout_email {
      color: #4C84FF;
      display: block;
      margin-bottom: 20px;
    }
  </style>
</head>

<body>
  <section class="email_warp">
    <div id="reset-password-email">
      <div class="logo">
        <img src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/dcec27cc6ece0eb5bb217e62e6bec104.svg" alt="logo">
      </div>

      <h1 class="email-title">
        尊敬的<span>AAA</span>您好:
      </h1>
      <p>您正在为登录邮箱为如下地址的 啦啦啦 账户重置密码:</p>
      <b class="accout_email">xxxx@abc.com</b>

      <p>请注意,如果这不是您本人的操作,请忽略并关闭此邮件。</p>
      <p>如您确认重置 XXXX 的账户密码,请点击下方按钮。</p>

      <a class="links_btn" href="https://www.baidu.com" >重置密码</a>

      <div class="warm_tips">
        <div class="desc">
          为安全起见,以上按钮为一次性链接,且仅在24小时内有效,请您尽快完成操作。
        </div>

        <p>如有任何疑问或无法完成注册,请通过如下方式与我们联系:</p>
        <p>邮箱:support@XXX.cn</p>
        <p>微信助理:XXXXX</p>

        <div class="qr_warp">
          <img src="https://XXXXXXXXXXXX" alt="微信二维码图片">
        </div>
        <p>本邮件由系统自动发送,请勿回复。</p>
      </div>

      <div class="email-footer">
        <p>您的智能项目助理</p>
        <p>XXXXXXXX</p>
      </div>
    </div>
  </section>
</body>

</html>


修改后的:

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>重置您的 无敌软件的 密码</title>

  <style>
    body,html,div,ul,li,button,p,img,h1,h2,h3,h4,h5,h6 {
      margin: 0;
      padding: 0;
    }

    body,html {
      background: #fff;
      line-height: 1.8;
    }

    h1,h2,h3,h4,h5,h6 {
      line-height: 1.8;
    }

    .email_warp {
      font-size: 14px;
      color: #212121;
      display: flex;
      /* align-items: center; */
      justify-content: center;
    }

    .logo {
      margin: 3em auto;
      width: 200px;
      height: 60px;
    }

    h1.email-title {
      font-size: 26px;
      font-weight: 500;
      margin-bottom: 15px;
      color: #252525;
    }

    a.links_btn {
      border: 0;
      background: #4C84FF;
      color: #fff;
      width: 100%;
      height: 50px;
      line-height: 50px;
      font-size: 16px;
      margin: 40px auto;
      box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.15);
      border-radius: 4px;
      outline: none;
      cursor: pointer;
      transition: all 0.3s;
      text-align: center;
      display: block;
      text-decoration: none;
    }

    .warm_tips {
      color: #757575;
      background: #f7f7f7;
      padding: 20px;
    }

    .warm_tips .desc {
      margin-bottom: 20px;
    }

    .qr_warp {
      max-width: 140px;
      margin: 20px auto;
    }

    .qr_warp img {
      max-width: 100%;
      max-height: 100%;
    }

    .email-footer {
      margin-top: 2em;
    }

    #reset-password-email {
      max-width: 500px;
    }
    #reset-password-email .accout_email {
      color: #4C84FF;
      display: block;
      margin-bottom: 20px;
    }
  </style>
</head>

<body style="overflow-y: hidden;">
  <section class="email_warp">
    <div id="reset-password-email">
      <div class="logo">
        <img src="https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/dcec27cc6ece0eb5bb217e62e6bec104.svg" alt="logo">
      </div>

      <h1 class="email-title">
        尊敬的 <span>AAA</span> 您好:
      </h1>
      <p>您正在为登录邮箱为如下地址的 啦啦啦 账户重置密码:</p>
      <b class="accout_email">xxxx@abc.com</b>

      <p>请注意,如果这不是您本人的操作,请忽略并关闭此邮件。</p>
      <p>如您确认重置 XXXX 的账户密码,请点击下方按钮。</p>

      <a class="links_btn" onclick="window.open('https:XXXXXXXXXXX')">重置密码</a>

      <div class="warm_tips">
        <div class="desc">
          按钮为一次性链接,且仅在24小时内有效,请您尽快完成操作。
        </div>
        <p>如有任何疑问或无法完成注册,请发送邮件到:xxxxxxxxxx@xxxxx.cn</p>
        <br>
        <p>感谢您的支持!本邮件由系统自动发送,请勿回复。</p>
      </div>
    </div>
  </section>
</body>

</html>


我的其他文章

亲身分享 一次 字节跳动 真实面试经历和面试题

其他薅羊毛网站

自己做的小商城,感兴趣可以相互讨论技术呀!

字节小柜:https://store.ityao.cn/


版权声明:本文为u014641168原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。