【Redis黑马点评】基于session实现登录【短信验证码登录、登录验证功能、拦截器】过程详解
创始人
2024-06-01 12:17:49
0

文章目录

  • 一. 黑马点评Redis项目实践
    • 1.1开发环境搭建
      • 1.1.1 数据库
      • 1.1.2 Springboot项目
      • 1.1.3 前端配置
    • 1.2 基于session实现登录
      • 1.2.1 发送短信验证码
      • 1.2.2 短信验证码登录
      • 1.2.3 登录验证功能
        • 1.2.3.1 编写拦截器

一. 黑马点评Redis项目实践

1.1开发环境搭建

1.课程介绍:

image-20230310093159781

2.数据库:

image-20230310100434653

image-20230310095932455

3.项目架构:

image-20230310100014091

1.1.1 数据库

MySQL数据库,版本8.0

导入sql文件即可:

image-20230310103004197

1.1.2 Springboot项目

将项目文件放到idea目录下:

image-20230310140858024

加入SpringBoot启动器:

image-20230310140923127

启动项目:

访问目录:

http://localhost:8081/shop-type/list

结果如下,将数据库里的值取出:

image-20230310141032774

1.1.3 前端配置

image-20230310141215512

在改目录下,进入终端:输入命令:

start nginx.exe

image-20230310141559261

访问目录:

http://localhost:8080/

image-20230310141701368

1.2 基于session实现登录

image-20230310142802585

1.2.1 发送短信验证码

思路如下:

image-20230310143024480

TODO 发送短信验证码并保存验证码

return userService.sendCode(phone,session);

IUserService:

public interface IUserService extends IService {Result sendCode(String phone, HttpSession session);
}

UserServiceImpl:

校验手机号:

if (RegexUtils.isPhoneInvalid(phone)){//2.如果不符合,返回错误信息return Result.fail("手机号格式错误");
}

符合,生成验证码

String code =RandomUtil.randomNumbers(6);

保存验证码到session

session.setAttribute("code",code);

因为目前在测试阶段,没有申请阿里云的短信服务,故用日志替代:

发送验证码

log.debug("发送验证码成功,验证码{{}}",code);

测试:

image-20230310212211524

查看日志:

image-20230310212224194

1.2.2 短信验证码登录

短信验证码登录思路:

image-20230310212944444

登录功能:登录参数,包含手机号、验证码;或者手机号、密码

TODO 实现登录功能:

return userService.login(loginForm,session);

login登录功能:

Result login(LoginFormDTO loginForm, HttpSession session);

UserServiceImpl:

校验手机号:

String phone = loginForm.getPhone();
if (RegexUtils.isPhoneInvalid(phone)){//2.如果不符合,返回错误信息return Result.fail("手机号格式错误");
}

效验验证码:

Object cacheCode=session.getAttribute("code");
String code = loginForm.getCode();if (cacheCode == null || !cacheCode.toString().equals(code)){//3.不一致,报错return Result.fail("验证码错误");}

一致根据手机号查询用户:

User user =query().eq("phone",phone).one();

判断用户是否存在

if (user == null){//6.不存在,创建新用户并且保存user = createWithPhone(phone);
}

保存用户信息到session中

session.setAttribute("user",user);

返回Result.ok()

return Result.ok();

createWithPhone,功能为:创建新用户

创建也会有:给一个随机的用户名:

User user = new User();
user.setPhone(phone);
user.setNickName("user_"+RandomUtil.randomNumbers(10));

保存用户:

save(user);
return user;

重新启动项目,填入手机号和验证码进行测试,测试结果如下:

填入一个错误的验证码:

image-20230310215836721

image-20230310215852564

填入正确的验证码:

image-20230310215915244

进入数据库查看:

image-20230310220025385

1.2.3 登录验证功能

思路:使用拦截器

image-20230310220335716

1.2.3.1 编写拦截器

新建立:Loginlnterceptor

1.获取session

HttpSession session = request.getSession();

2.获取session中的用户

Object user = session.getAttribute("user");

3.判断用户是否存在

if(user == null){//4.不存在,拦截,返回401代码response.setStatus(401);return false;
}

5.存在,保存用户信息到ThreadLocal

UserHolder.saveUser((User) user);

6.放行

return true;

7.移出

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {UserHolder.removeUser();
}

编写MvcConfig:

配置过滤器:

@Override
public void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(new Loginlnterceptor()).excludePathPatterns("/shop/**","/voucher/**","/shop-type/**","/upload/**","/user/code","/blog/hot","/user/login");
}

重新启动:效果如下

image-20230311122937814

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...