Redis 学习笔记 3:黑马点评

Redis 学习笔记 3:黑马点评

准备工作

需要先导入项目相关资源:

启动后端代码和 Nginx。

短信登录

发送验证码

@PostMapping("code")
public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
   
    // 发送短信验证码并保存验证码
    return userService.sendCode(phone, session);
}
@Log4j2
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
   

    @Override
    public Result sendCode(String phone, HttpSession session) {
   
        if (RegexUtils.isPhoneInvalid(phone)) {
   
            return Result.fail("不是合法的手机号!");
        }
        String code = RandomUtil.randomNumbers(6);
        session.setAttribute("code", code);
        // 发送短信
        log.debug("发送短信验证码:{}", code);
        return Result.ok();
    }
}

登录

@PostMapping("/login")
public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session) {
   
    // 实现登录功能
    return userService.login(loginForm, session);
}
@Override
public Result login(LoginFormDTO loginForm, HttpSession session) {
   
    // 验证手机号和验证码
    if (RegexUtils.isPhoneInvalid(loginForm.getPhone())) {
   
        return Result.fail("手机号不合法!");
    }
    String code = (String) session.getAttribute("code");
    if (code == null || !code.equals(loginForm.getCode())) {
   
        return Result.fail("验证码不正确!");
    }
    // 检查用户是否存在
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.eq("phone", loginForm.getPhone());
    User user = this.baseMapper.selectOne(qw);
    if (user == null) {
   
        user = this.createUserByPhone(loginForm.getPhone());
    }
    // 将用户信息保存到 session
    session.setAttribute("user", user);
    return Result.ok();
}

private User createUserByPhone(String phone) {
   
    User user = new User();
    user.setPhone(phone);
    user.setNickName("user_" + RandomUtil.randomString(5));
    this.baseMapper.insert(user);
    return user;
}

统一身份校验

定义拦截器:

public class LoginInterceptor implements HandlerInterceptor {
   
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   
        // 从 session 获取用户信息
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if (user == null) {
   
            response.setStatus(401);
            return false;
        }
        // 将用户信息保存到 ThreadLocal
        UserDTO userDTO = new UserDTO();
        userDTO.setIcon(user.getIcon());
        userDTO.setId(user.getId());
        userDTO.setNickName(user.getNickName());
        UserHolder.saveUser(userDTO);
        return true;
    }

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

添加拦截器:

@Configuration
public class WebMVCConfig implements WebMvcConfigurer {
   
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
   
        registry.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值