(现在做单机登录) 后面修改为redis单点登录
登录逻辑设计
接收参数:用户接账户,密码
请求类型:post get一般用于数据查询,请求参数长度有限制,请求参数很长时不建议用get
请求体:json (还有rpc的情况)
返回值:用户信息(脱敏)
登录态(session)存放在了tomcat中,也可以存放到redis中
登录业务代码实现
@Overridepublic 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)
工作原理
逻辑删除
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注解