java-用户登录功能实现

思路:相比与注册功能,登录需要的参数少了一个确认密码,但是多了一个请求实体类用于记录用户的登录态。主要步骤是,首先是验证账号,密码的规范性,其次对数据库进行查询是否已经存在,然后,对用户信息进行脱敏,只提取出不敏感的信息,最后,记录登录态,返回脱敏后的用户实体。

@Override
    public User UserLogin(String userAccount, String userPassword, HttpServletRequest request) {
        if (StringUtils.isAnyBlank(userAccount,userPassword)){
            return null;
        }
        if (userAccount.length()<4){
            return null;
        }
        if(userPassword.length()<8){
            return null;
        }
        //使用正则表达式来判断userAccount当中是否有特殊字符
        String regex = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%…… &*()——+|{}【】‘;:”“’。,、?]";
        Matcher matcher = Pattern.compile(regex).matcher(userAccount);
        //m.find:如果匹配到相同的字符就返回true,这里如果匹配到相同的字符,说明使用了特殊字符
        if(matcher.find()){
            return null;
        }


        //2.加密
        String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());//使用md5加密算法


        //查询账户是否重复
        //3.mybatis_plus当中的查询方法
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //在数据库中userAccount字段中的值是userAccount的有多少条
        queryWrapper.eq("userAccount",userAccount);
        queryWrapper.eq("userPassword",encryptPassword);
        User user =userMapper.selectOne(queryWrapper);
        if (user==null){
            log.info("user login failed,userAccount cannot match userPassword");
            return null;
        }

        //3.用户脱敏
        User safetyUser=new User();
        safetyUser.setId(user.getId());
        safetyUser.setUsername(user.getUsername());
        safetyUser.setUserAccount(user.getUserAccount());
        safetyUser.setAvatarUrl(user.getAvatarUrl());
        safetyUser.setGender(user.getGender());
        safetyUser.setPhone(user.getPhone());
        safetyUser.setEmail(user.getEmail());
        safetyUser.setUserStatus(user.getUserStatus());
        safetyUser.setCreateTime(user.getCreateTime());
        safetyUser.setUpdateTime(user.getUpdateTime());
        //4.记录用户的登录态
        request.getSession().setAttribute(USER_LOGIN_STATE,safetyUser);
        return safetyUser;

1.验证账号,密码的规范性

长度验证+特殊字符验证+加密

2.对数据库进行查询

使用的是queryWrapper对数据库进行查询,如果没有查询到返回错误日志信息

3.用户脱敏

4.记录用户的登录态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值