伙伴匹配(后端)-- 用户登录

本文详细描述了登录逻辑的设计过程,包括参数验证、加密处理、使用session存储登录态,以及如何通过cookie和session跟踪用户身份。同时介绍了MyBatis-Plus中的逻辑删除功能,如何配置和在实体类上使用@TableLogic注解。
摘要由CSDN通过智能技术生成


(现在做单机登录) 后面修改为redis单点登录

登录逻辑设计

接收参数:用户接账户,密码
请求类型:post get一般用于数据查询,请求参数长度有限制,请求参数很长时不建议用get
请求体:json (还有rpc的情况)
返回值:用户信息(脱敏)
登录态(session)存放在了tomcat中,也可以存放到redis中

登录业务代码实现

 @Override
    public User userLogin(String userAccount, String userPassword, HttpServletRequest request) {
        //1.账户,密码,校验码为空
        if (StringUtils.isAnyBlank(userAccount, userPassword)) {
            return null;
        }
        // 2.账户小于4位
        if (userAccount.length() < 4) {
            return null;
        }
        // 3.密码,校验码小于8位
        if (userPassword.length() < 8) {
            return null;
        }
        // 4.账户包含特殊字符(正则表达式)
        String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
        Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
        if (matcher.find()) {
            return null;
        }
        //校验完成后,加密
        String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());
        // 6.账户重复,放在后面,可以节省查询次数,节省内存性能
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("userAccount", userAccount);
        queryWrapper.eq("userPassword", userPassword);
        User user = userMapper.selectOne(queryWrapper);
        if (user == null) {
            log.info("userPassword can not match userAccount");
            return null;
        }
        //用户信息脱敏
        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.setUserPassword(user.getUserPassword());
        safetyUser.setPhone(user.getPhone());
        safetyUser.setEmail(user.getEmail());
        safetyUser.setUserStatus(user.getUserStatus());
        safetyUser.setCreateTime(user.getCreateTime());
        //将用户信息保存到session中
        request.getSession().setAttribute(USER_LOGIN_STATE,safetyUser);
        return safetyUser;
    }

用户登录态

如何知道是哪个用户登录了?

基于session来实现登录,将登录信息存到session里面

cookie与session

cookie与seesion的定义

  • cookie是在客户端保留少量数据的技术,主要通过响应头向客户端响应一些客户端要保留的信息
  • session是在服务端保留更多数据的技术,主要通过HttpSession对象保存一些和客户端相关的信息
  • cookie和session配合记录请求状态

举例: 张三去银行办业务

  • 张三第一次去某个银行办业务,银行会为张三开户(Session),并向张三发放一张银行卡(cookie)
  • 张三后面每次去银行,就可以携带之间的银行卡(cookie),银行根据银行卡找到之前张三的账户(session)

工作原理

1682413051408.png

逻辑删除

mybatis-plus提供的功能,并不是真正的删除,而是给数据库的一个字段的值设置为0 还是 1来判断是否删除

配置

global-config:
db-config:
  logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
  logic-delete-value: 1 # 逻辑已删除值(默认为 1)
  logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

添加@TableLogic注解

在实体类数据库是否删除字段上面添加@TableLogic注解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值