首先登录需要获取验证码
然后我们需要根据第三方服务发送验证码
我们需要将验证码存入redis中 存储的key为 sms:code:phone value为 生成的验证码+系统当前时间 在redis中存活时间暂定为1小时
如果用户在一分钟内多次请求发送短信验证码(这里虽然前段会进行设置,但是为了预防有人恶意申请短信 而造成短信资源的浪费 我们后端接口也需要设计1min钟内,用户无法继续申请该接口)
我们就需要在获取验证码之前 先去redis中获取 根据key为sms:code:phone 获取值 若值不为空 那么我们就取出redis中的值 然后截取出时间部分 和现在的时间比较 是否在1min中之内 如果是 则返回自定义error信息 如果超过1min 那么可以继续申请获取验证码
—–
当用户提交登录表单 时我们需要对表单进行JSR303验证
如果表单中提交的信息不满足实体类中的验证信息 则抛出异常
由bingdingResult 接受异常 我们再将异常遍历 put到我们创建的hashMap中
然后我们需要将错误添加到model中 再将地址重定向到注册页面
否则 代表登录合法
此时 我们需要获取到用户提交的手机号 拼接上 验证码的前缀 去redis中获取 验证码 并截取出验证码字段 如果从redis中获取的验证码和表单传过来的验证码不一致 那么我们仍需要将页面重定向到注册页面 返回对应的验证码和 错误信息
如果验证码正确 那么我们需要删除 sms:code:phone 的key
然后去注册 我们需要设置注册用户的默认等级 用户的username 用户的phone 因为这两个字段是在数据库中是唯一的所以我们需要在插入字段前 需检查该字段是否存在
如果count=0说明之前不存在该账号和手机号 说明当前账号和手机号是可以注册的
接着我们需要设置NickName 为了方便和UserName同名
接着 我们需要将用户注册的密码加密
如果注册成功
那么就将页面跳转到主页 否则注册不成功 就将错误添加到model中返回给注册页面
———–
如果该注册成功用户第二次登录,那么我们需要获取到他的登录信息 账号和密码 同样我们需要进行验证
如果验证错误 则会抛出异常 由我们的全局异常进行捕获
将错误信息添加到 redirectAttributes 中 重定向到登录页面
如果验证成功 我们需要调用member服务进行数据库查询(根据账号(或者手机)和密码登录) 如果确实存在 该登录用户 那么我们需要将该用户存在数据库中加密的密码解密 和输入的密码进行比对 如果匹配 则将该对象实体类返回给认证模块
如果认证模块接受到该实体类 那么就将该实体类存入到session中 userLogin,实体类
然后重定向到首页面 否则就重定向到登录页面
当我们将member数据存入session 中 我们跨服务调用 是调用不了的 我们需要配置sessionConfig
同时 我们要将实体类存入到redis中我们需要将实体类打成二进制 存入redis中 否则会出现无法序列化
我们需要配置一下内容
这样我们就能获取到父域名相同,session共享问题
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/275887.html