springboot+ssm+vue前后端分离项目-宠物之家

前言

宠物乐园这个项目是为xxx公司开发o2o模式一个项目。它是以宠物为中心,提供宠物领养,寻主的基本功能,还提供了宠物服务,相关物品购买,宠物相关知识学习等功能一个综合性平台。它主要有组织机构,用户,服务,宠物,订单, 支付等模块。它是使用前后端分离开发模式,前端使用的是vue技术栈,后台使用的是springboot+ssm+docker。

一、人员组成

共11人 周期:半年
项目经理:管人管项目 1
架构师: 负责项目架构+技术选型+疑难问题解决+培训 1
UI: 设计界面 1
H5: 前端开发工程师 2
后台: 后台开发工程师 4
测试: 测试人员 1
运维人员: 搭建开发公共环境,线上环境 1。

二、负责模块

1.用户模块

1.1注册

用户注册分为邮箱注册和手机号注册,由于逻辑都是一样的,只是激活方式不一样,所以这里只以手机号为例

1.1.1基本流程

手机号注册:
1)输入手机号
2)获取验证码并且输入
3)输入密码和确认密码
4)完成注册
在这里插入图片描述手机发送短信验证码流程
在这里插入图片描述

1.1.2 表的设计

(1) 1张用户信息表t_user
注意:
1.如果是手机号注册,用户的默认状态就是激活状态。如果是邮箱注册,需要给用户发送邮件,让用户登录邮件进行激活。目的是防止用户随便写一个不可用的邮箱注册账号。但是目前大多数新项目都不用了,都用手机号。
2.前台用户注册的密码不能是明文的形式存储在数据库,需要进行加密处理,防止用户信息泄露。
(2)1张登录信息表t_logininfo
表里面有一列栏位type,用于区分是后台工作人员登录还是前台用户登录. 因为我的设计就算你是管理员,你想消费,你也要注册用户,意味着员工表和用户表中分别有记录。 也就会造成logininfo有相同电话或用户名或email等两个记录,通过type进行区分。
在这里插入图片描述在这里插入图片描述

1.1.3 技术准备

(1)工具类StrUtils,生成随机字符串,作为验证码

    public static String getComplexRandomString(int length) {
   
        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
   
            int number = random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }

(2)md5不可逆加密,用来加密用户登录密码
盐值salt:同一种加密算法,由于不同的盐值,加密出来就不一样。
1)整个系统使用同一个盐值,多个用户共用-定义一个常量
每个用户都有自己盐值,就算是相同的密码,两个用用户加密出来也不一样

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
   
    /**
     * 加密
     * @param context
     */
    public static String encrypByMd5(String context) {
   
        try {
     
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(context.getBytes());//update处理  
            byte [] encryContext = md.digest();//调用该方法完成计算  
  
            int i;  
            StringBuffer buf = new StringBuffer("");  
            for (int offset = 0; offset < encryContext.length; offset++) {
   //做相应的转化(十六进制)  
                i = encryContext[offset];  
                if (i < 0) i += 256;  
                if (i < 16) buf.append("0");  
                buf.append(Integer.toHexString(i));  
           }  
            return buf.toString();
        } catch (NoSuchAlgorithmException e) {
   
            // TODO Auto-generated catch block  
            e.printStackTrace();
            return  null;
        }  
    }

(3)引入redis数据库

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

(4)短信发送接口
找三大运营,或者中间商,我们项目中使用网建短信通
链接: http://sms.webchinese.com.cn/Rates.shtml
导包,并准备发送短信的工具类

		<dependency>
            <groupId>commons-httpclient</groupId>
            <artifactId>commons-httpclient</artifactId>
            <version>3.1</version>
		</dependency>
1.1.4 后端

短信发送:在这里插入图片描述

 @Override
    public AjaxResult sendSmsCode(Map<String, String> param) {
   
        String phone = param.get("phone");

        if(!StringUtils.hasLength(phone)) {
   
            return AjaxResult.result().setMessage("请输入手机号");
        }

        User user = userMapper.loadByPhone(phone);
        if(user != null){
   
            return AjaxResult.result().setMessage("该手机号已被注册");
        }

        String key = "registerCode" + phone;
        String value =(String)redisTemplate.opsForValue().get(key);
        String code = "";
        //如果value为null,说明是第一次或者过期了,则生成随机验证码,并且下面会存放到redis里面去
        if(!StringUtils.hasLength(value)){
   
            code = StrUtils.getComplexRandomString(4);
        }else {
   
            //如果value不为空,说明存在验证码,判断是否过了重发事件,还是用同一个验证码
            String time = value.split(":")[1];
            if(System.currentTimeMillis()-Long.parseLong(time) < 1*60*1000){
   
                return AjaxResult.result().setMessage("请不要频繁发送");
            }
            code = value.split(":")[0];
        }
        //存放到redis,有效时间3分钟.设置value的格式为 验证码:存入时间
        int expireTime = 3;
        redisTemplate.
  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值