注册逻辑
- 用户在前端输入账户和密码、校验码
- 校验用户的账户、密码、校验密码是否符合要求
-
- 非空
- 账户不小于4位
- 密码不小于8位
- 账户不能包含特殊字符
- 账户不能重复
- 密码和校验密码相同
- 对密码进行加密(不能以明文直接存储到数据库中)
- 向数据库插入数据
登录逻辑
- 接收参数:用户账户、密码
- 请求类型:post
- 请求体 json格式
- 返回值:用户信息(脱敏)
- 校验用户账户和密码是否合法
-
- 非空
- 账户密码不小于4位
- 密码不小于8位
- 账户不能包含特殊字符
- 校验密码是否正确 要和数据库中的密码
- 记录用户的登录态(Session),将其存到服务器上 (用后端SpringBoot 框架封装的服务器tomcat去记录) cookie
- 返回用户信息(脱敏) 隐藏敏感信息
在UserService接口中 写方法
public interface UserService extends IService<User> {
/**
* 用户注册
* @param userAccount 用户账户
* @param userPassword 用户密码
* @param checkPassword 校验密码
* @return 用户id
*/
long userRegister(String userAccount, String userPassword, String checkPassword);
/**
* 用户登录
* @param userAccount
* @param userPassword
* @param request
* @return 脱敏后的用户信息
*/
User userLogin(String userAccount, String userPassword, HttpServletRequest request);
/**
* 用户脱敏
* @param originUser
* @return
*/
User getSafetyUser(User originUser);
/**
* 用户注销
* @param request
* @return
*/
int userLogout(HttpServletRequest request);
}
然后在实现类中 写具体的代码逻辑文章来源:https://www.toymoban.com/news/detail-472865.html
@Service
@Slf4j
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService{
private static final String SALT = "sparrow";
@Resource
private UserMapper userMapper;
@Override
public long userRegister(String userAccount, String userPassword, String checkPassword) {
//1.账户密码 校验密码不能为空
if (StringUtils.isAnyBlank(userAccount, userPassword, checkPassword)) {
return -1;
}
//2.账号不能小于4位
if (userAccount.length() < 4) {
return -1;
}
//3.用户密码不能小于8位
if (userPassword.length() < 8 || checkPassword.length() < 8) {
return -1;
}
//4.账户不能包含特殊字符
String validPattern = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Matcher matcher = Pattern.compile(validPattern).matcher(userAccount);
if (matcher.find()) {
return -1;
}
//5.密码和校验密码不能相同
if (!userPassword.equals(checkPassword)) {
return -1;
}
//6.账户不能重复
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("userAccount", userAccount);
long count = userMapper.selectCount(queryWrapper);
if (count > 0) {
return -1;
}
//7.加密
String encryptPassword = DigestUtils.md5DigestAsHex((SALT + userPassword).getBytes());
//8.插入数据
User user = new User();
user.setUserAccount(userAccount);
user.setUserPassword(userPassword);
boolean saveResult = this.save(user);
if (!saveResult) {
return -1;
}
return user.getId();
}
@Override
public User userLogin(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 = "[`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
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 = getSafetyUser(user);
//4.记录用户的登录态
request.getSession().setAttribute(USER_LOGIN_STATE,safetyUser);
return safetyUser;
}
/**
* 用户脱敏
* @param originUser
* @return
*/
@Override
public User getSafetyUser(User originUser) {
if (originUser == null) {
return null;
}
User safetyUser = new User();
safetyUser.setId(originUser.getId());
safetyUser.setUsername(originUser.getUsername());
safetyUser.setUserAccount(originUser.getUserAccount());
safetyUser.setAvatarUrl(originUser.getAvatarUrl());
safetyUser.setGender(originUser.getGender());
safetyUser.setPhone(originUser.getPhone());
safetyUser.setEmail(originUser.getEmail());
safetyUser.setUserRole(originUser.getUserRole());
safetyUser.setUserStatus(originUser.getUserStatus());
safetyUser.setCreateTime(originUser.getCreateTime());
return safetyUser;
}
/**
* 用户注销
* @param request
*/
@Override
public int userLogout(HttpServletRequest request) {
// 移除登录态
request.getSession().removeAttribute(USER_LOGIN_STATE);
return 1;
}
}
return null 和return -1可以自定义异常类来throw 打印信息文章来源地址https://www.toymoban.com/news/detail-472865.html
到了这里,关于Java实现注册登录代码通用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!