SpringBoot项目实战-配置验证码登录系统

343 阅读2分钟

往期笔记已经实现了用户名密码的登录方式,现在,我们要扦插验证码进行登录,下面,简单记录下实现的过程。
首先就是回到之前创建好的AdminLoginParam实体类中,添加变量code:

@ApiModelProperty(value = "验证码",required = true)
private String code;

然后就要回到登录接口中,也就是在LoginController控制层中的login方法中获取用户输入的验证码:

//adminLoginParam.getCode(),获取到用户输入的验证码


@ApiOperation(value = "登录之后返回token")
@PostMapping("/login")
public RespBean login(@RequestBody AdminLoginParam adminLoginParam, HttpServletRequest request){//这里需要拿到用户传过来的AdminLoginParam实体信息和,HttpServletRequest
    return adminService.login(adminLoginParam.getUsername(),adminLoginParam.getPassword(),adminLoginParam.getCode(),request);
}

记得要顺着实现接口的步骤:控制层-》服务层-》实现层-》mapper(数据库层)的顺序把code参数都补全:

//IAdminService
RespBean login(String username, String password,String code, HttpServletRequest request);
//AdminServiceImpl中String code是新补全的
@Override
public RespBean login(String username, String password, String code, HttpServletRequest request) {
    //因为之前生成的在生成验证码的文件中已经把生成的验证码放到session中,所以可以在session中获取
    String captcha = (String) request.getSession().getAttribute("captcha");
    //对验证码校验一下
    if(StringUtils.isEmpty(code)||!captcha.equalsIgnoreCase(code)){
        return RespBean.error("验证码输入错误,请中心");
    }
    //登录
    UserDetails userDetails=userDetailsService.loadUserByUsername(username);//通过用户名获取userDetail
    if(userDetails==null||!passwordEncoder.matches(password,userDetails.getPassword())){
        return RespBean.error("用户名或密码错误!");
    }
    if(!userDetails.isEnabled()){
        return RespBean.error("账号被禁用!请联系管理员");
    }
    //更新security登录对象到spring security全文中
    UsernamePasswordAuthenticationToken authenticationToken=new UsernamePasswordAuthenticationToken(userDetails,null,userDetails.getAuthorities());
    SecurityContextHolder.getContext().setAuthentication(authenticationToken);


    //账号和密码都没问题时,就可以通过userDetail生成token
    String token =jwtTokenUtil.generateToken(userDetails);
    Map<String,String> tokenMap=new HashMap<>();
    tokenMap.put("token",token);
    tokenMap.put("tokenHead",tokenHead);
    return RespBean.success("登录成功!",tokenMap);
}

上面方法的开始是补全我们需要验证码登录需要获取存储在session中的验证码的方法,以及校验,如果成功,则走登录逻辑,否则,返回错误信息!!!以上就是实现验证码登录的笔记了!!!