本篇文章为你整理了我的第一个项目(六):(前后端)密码校验(前后端密码传输)的详细内容,包含有密码前端加密后端解密 前后端密码传输 前端密码验证 前后端分离密码加密解决方案 我的第一个项目(六):(前后端)密码校验,希望能帮助你了解 我的第一个项目(六):(前后端)密码校验。
主要体现为,乱输也能登进去
(小问题)
要是这么上线估计直接寄了
分析一波密码校验怎么做:
前端输完用户名密码之后,将数据发送到后端处理
后端要做以下几件事
①先确认这个用户名已注册
②我们拿着这个用户名去数据库中找对应的数据,拿到密码
③将前端发过来的密码与后端找到的密码进行比较
对了返回true,不对就false,
返回给前端
完成密码校验
1.来看看登陆这一部分涉及的代码:
SysUserController.java
@PostMapping("login")
public CommonResp login(@RequestBody SysUserLoginReq req){
// zxcv1234
req.setPassword(DigestUtils.md5DigestAsHex(req.getPassword().getBytes()));
CommonResp resp = new CommonResp ();
SysUserLoginResp loginResp = sysUserService.login(req);
if (loginResp == null) {
resp.setSuccess(false);
resp.setContent(loginResp);
return resp;
}
SysUserServicelmpl.java中重写login方法:
@Override
public SysUserLoginResp login(SysUserLoginReq req) {
SysUserEntity userDb = selectByLoginName(req.getLoginName());
QueryWrapper SysUserEntity wrapper = new QueryWrapper ();
if(ObjectUtils.isEmpty(userDb)){
//用户不存在
return null;
}else {
String s1 = userDb.getPassword();
String s2 = req.getPassword();
//进行字符串校验
if(s1.equals(s2)){
//密码验证成功
SysUserLoginResp userLoginResp = CopyUtil.copy(userDb, SysUserLoginResp.class);
return userLoginResp;
}else {
//密码校验失败
return null;
//查询loginName是否被注册
public SysUserEntity selectByLoginName(String loginName){
//QueryWrapper ()
QueryWrapper SysUserEntity wrapper = new QueryWrapper ();
//wrapper.lambda().eq()单表查询,在"SysUserEntity::getLoginName"找一个指定的"loginName"
wrapper.lambda().eq(SysUserEntity::getLoginName,loginName);
//BaseMapper的selectList()方法,根据id批量查询
List SysUserEntity userEntityList = sysUserMapper.selectList(wrapper);
//CollectionUtils.isEmpty()判断集合是否为空
if(CollectionUtils.isEmpty(userEntityList)){
//若判断为空,则返回null,意思是没被注册过
return null;
}else {
//查到了,将这条数据返回
return userEntityList.get(0);
}
2.先确认这个用户名已注册
//wrapper.lambda().eq()单表查询,在"SysUserEntity::getLoginName"找一个指定的"loginName"
wrapper.lambda().eq(SysUserEntity::getLoginName,loginName);
lambda表达式看不懂可以点开看一下:
Java Lambda 表达式 菜鸟教程 (runoob.com)
3.我们拿着这个用户名去数据库中找对应的数据,拿到密码
//BaseMapper的selectList()方法,根据id批量查询
List SysUserEntity userEntityList = sysUserMapper.selectList(wrapper);
//CollectionUtils.isEmpty()判断集合是否为空
if(CollectionUtils.isEmpty(userEntityList)){
//若判断为空,则返回null,意思是没被注册过
return null;
}else {
//查到了,将这条数据返回
return userEntityList.get(0);
}
4.将前端发过来的密码与后端找到的密码进行比较
String s1 = userDb.getPassword();
String s2 = req.getPassword();
//进行字符串校验
if(s1.equals(s2)){
//密码验证成功
SysUserLoginResp userLoginResp = CopyUtil.copy(userDb, SysUserLoginResp.class);
return userLoginResp;
}else {
//密码校验失败
return null;
}
不要写成以下形式,
String a = userDb.getPassword();
String b = req.getPassword();
if(a==b){
SysUserLoginResp userLoginResp = CopyUtil.copy(userDb, SysUserLoginResp.class);
return userLoginResp;
}else {
//密码校验失败
return null;
}
a,b字符串并不指向同一对象,
所以,即使字符串完全相同,a==b也是false
5.前端的校验部分:
作用:防止输入空值无限注册
//表单验证
if (this.loginForm.loginName == "") {
this.$message({
message: 请输入用户名,
type: error
return;
if (this.loginForm.password == "") {
this.$message({
message: 请输入密码,
type: error
return;
//发送登陆请求
if (this.loginForm.loginName != "" this.loginForm.password != "") {
this.axios.post(http://localhost:3312/sys-user/login, this.loginForm).then((resp) = {
console.log(resp);
let data = resp.data;
if (data.success) {
this.loginForm = {};
this.$message({
message: 登陆成功!!!,
type: success
this.$router.push({ path: /Home })
} else {
this.$message({
message: 登陆失败,密码错误或用户名未注册,
type: error
console.log(data)
}
(好烂的写法)
6.效果展示:
7.源码分享:
https://gitee.com/tang-and-han-dynasties/login-entity.git
以上就是我的第一个项目(六):(前后端)密码校验(前后端密码传输)的详细内容,想要了解更多 我的第一个项目(六):(前后端)密码校验的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。