用户管理中心——登录功能
- 一、用户登录
- 1. 登录设计
- 2. 登录方法实现
- 实现细节
- 逻辑删除
- 实现代码
- 3. 登录接口实现
- 4. 测试
- 二、用户管理
- 用户管理接口
一、用户登录
1. 登录设计
2. 登录方法实现
实现细节
- 首先在接口中
com.example.demo.service.UserService
定义一个用户登录doLogin()
的方法
在doLogin()
方法上按Alt + Enter
选择Implement method ‘doLogin’
,将在实现类com.example.demo.service.impl.UserServiceImpl
中自动生成实现方法
- doLogin实现方法
逻辑删除
实现代码
方法实现代码
@Override
public User doLogin(String userAccount, String userPassword, HttpServletRequest request) {
// 1. 校验
if(StringUtils.isAnyBlank(userAccount, userPassword)){
return null;
}
if(userAccount.length() < 4){
return null;
}
if(userPassword.length() < 8){
return null;
}
// 账户不能包含特殊字符
String validPattern = "\\pP|\\pS|\\s+";
Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
if(matcher.find()){
return null;
}
// 2. 校验密码是否正确
String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());
// 查询用户是否存在——从数据库中查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
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.setCreatTime(user.getCreatTime());
// 4. 记录用户的登录态
request.getSession().setAttribute(USER_LOGIN_STATE, safetyUser);
return safetyUser;
}
3. 登录接口实现
controller层
就是把services层
中的方法代码封装成一个接口,允许前端去调用
【算法思想:先把逻辑写出来,根据逻辑翻译(用计算机语言翻译)】
-
封装一个对象,用来记录所有的请求参数
在生成序列化UID
-
然后在controller请求参数处引用
-
实现注册接口,还需要写一个登录接口
控制层controller封装请求
@Restcontroller 适用于编写 restful 风格的 api,返回值默认为 json 类型
4. 测试
IDEA
或者直接点击这里,自己创建
鱼皮项目_用IDEA自带的测试工具报错
插件的使用——自动填充Java的参数
Alt+Enter自动填充参数
二、用户管理
用户管理接口
用户登录后从session
中拿到用户的登录态
项目先启动
,然后登陆
之后再查询
需要过滤掉密码
可以包装成方法,把方法自动pull到接口里
最后在Controller需要脱敏的地方掉用一下
简写成
return userList.stream().map(user -> userService.getSafetyUser(user)).collect(Collectors.toList());