携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情
加密登入实现
因为我们matches通过前端传输过来的密码对比数据库中密码即可判断密码是否正确! 我们知道每次encode后的密码都不一样,所以我们不能通过查询数据库中username+password验证! 我们先通过username查询到数据库中的密码,然后通过mathes匹配判断是否登入成功!
- UserMapper添加查询用户方法!
//加密后的登入方法!
public ResponseBodyMessage<User> login(@RequestParam String username, @RequestParam String password, HttpServletRequest request){
User user = userMapper.selectUserByUserName(username);
//返回响应
if(user!=null){//查询到username用户!
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
//匹配验证密码是否正确!
boolean flg = bCryptPasswordEncoder.matches(password,user.getPassword());
if(flg){//登入成功!
request.getSession().setAttribute(Contant.USERINFO_SESSION_KEY,user);
return new ResponseBodyMessage<User> (0,"登入成功",user);
}else{//密码错误!
return new ResponseBodyMessage<User> (0,"用户名或密码错误",user);
}
}else{//用户不存在!
return new ResponseBodyMessage<User> (-1,"用户名或密码错误",user);
}
}
pastman验证代码:
这里我们发现失败了,因为我们引入BCrypet加密依赖时,导入的security框架,我们只是用了其下的一个类用于加密,并没有用到该框架的功能!而导入security框架后,该项目中的接口都需要身份验证和授权!所以这个我们就登入失败了!
我们在启动类上加上一行注解即可解决该问题!
@SpringBootApplication(exclude =
{org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
创建config类,添加AppConfig类
刚刚BCrypetPasswordEncoder对象创建使用方式并不符合SpringIoC思想,所以我们通过Bean注解先将该对象注册到Spring中,然后通过Spring获取对象!
@Configuration
public class AppConfig {
//将BCrypetPasswordEncoder对象交给spring管理!
@Bean
public BCryptPasswordEncoder getBCryptPasswordEncoder(){
return new BCryptPasswordEncoder();
}
}
这样我们的登入功能就完善好了!
实现注册功能
约定注册请求和响应
请求:
{
post
url:user/register
data:{username,password}
}
响应:
{
status:"状态码"
message:"响应信息"
data:{username,password}
}
UserMapper类中添加一个注册接口!
//注册功能!
int register(String username,String password);
Mapper.xml下实现该接口
<!-- 注册添加用户-->
<insert id="register">
insert into user (username,password) values(#{username},#{password});
</insert>
Controller的User类下实现注册功能
//注册功能
@RequestMapping("/register")
public ResponseBodyMessage<User>register(@RequestParam String username,@RequestParam String password,HttpServletRequest request){
//1.首先查询该用户是否存在!
User user = userMapper.selectUserByUserName(username);
if(user!=null){//查询到该用户,说明用户存在!
return new ResponseBodyMessage<User>(-1,"该用户已注册,请修改用户名重新注册",null);
}
//2.用户不存在,就注册该用户!
//对密码进行加密后保存在数据库中!
password = appConfig.getBCryptPasswordEncoder().encode(password);
//将用户注册到数据库中!
userMapper.register(username,password);
//将注册好的用户信息放回给客户端!
user = userMapper.selectUserByUserName(username);
request.getSession().setAttribute(Contant.USERINFO_SESSION_KEY,user);
return new ResponseBodyMessage<User>(0,"注册成功!",user);
}
postman验证
- 用户存在
-
用户不存在注册成功!
通过注册的用户验证一下登入功能