use of com.fanxb.bookmark.common.exception.FormDataException in project bookmark by FleyX.
the class UserServiceImpl method checkPassword.
/**
* 功能描述: 密码校验,校验成功返回一个actionId,以执行敏感操作
*
* @param password password
* @return java.lang.String
* @author fanxb
* @date 2019/11/11 23:41
*/
public String checkPassword(String password) {
int userId = UserContextHolder.get().getUserId();
String pass = HashUtil.getPassword(password);
User user = userDao.selectByUserIdOrGithubId(userId, null);
if (!user.getPassword().equals(pass)) {
throw new FormDataException("密码错误,请重试");
}
String actionId = UUID.randomUUID().toString().replaceAll("-", "");
String key = RedisConstant.getPasswordCheckKey(userId, actionId);
RedisUtil.set(key, "1", 5 * 60 * 1000);
return actionId;
}
use of com.fanxb.bookmark.common.exception.FormDataException in project bookmark by FleyX.
the class UserServiceImpl method updateIcon.
/**
* 修改用户头像
*
* @param file file
* @return 访问路径
*/
public String updateIcon(MultipartFile file) throws Exception {
if (file.getSize() / NumberConstant.K_SIZE > ICON_SIZE) {
throw new FormDataException("文件大小超过限制");
}
int userId = UserContextHolder.get().getUserId();
String fileName = file.getOriginalFilename();
assert fileName != null;
String path = Paths.get(FileConstant.iconPath, userId + "." + System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."))).toString();
Path realPath = Paths.get(CommonConstant.fileSavePath, path);
FileUtil.ensurePathExist(realPath.getParent().toString());
file.transferTo(realPath);
path = File.separator + path;
userDao.updateUserIcon(userId, path);
return path;
}
use of com.fanxb.bookmark.common.exception.FormDataException in project bookmark by FleyX.
the class UserServiceImpl method resetPassword.
/**
* Description: 重置密码
*
* @param body 重置密码 由于参数和注册差不多,所以用同一个表单
* @author fanxb
* @date 2019/7/9 19:59
*/
public void resetPassword(RegisterBody body) {
User user = userDao.selectByUsernameOrEmail(body.getEmail(), body.getEmail());
if (user == null) {
throw new FormDataException("用户不存在");
}
String codeKey = CommonConstant.authCodeKey(body.getEmail());
String realCode = RedisUtil.get(codeKey, String.class);
if (StringUtil.isEmpty(realCode) || (!realCode.equals(body.getAuthCode()))) {
throw new FormDataException("验证码错误");
}
RedisUtil.delete(codeKey);
String newPassword = HashUtil.getPassword(body.getPassword());
userDao.resetPassword(newPassword, body.getEmail());
}
use of com.fanxb.bookmark.common.exception.FormDataException in project bookmark by FleyX.
the class UserServiceImpl method register.
/**
* Description: 用户注册
*
* @param body 注册表单
* @author fanxb
* @date 2019/7/6 11:30
*/
public String register(RegisterBody body) {
User user = userDao.selectByUsernameOrEmail(body.getUsername(), body.getEmail());
if (user != null) {
if (user.getUsername().equals(body.getUsername())) {
throw new FormDataException("用户名已经被注册");
}
if (user.getEmail().equals(body.getEmail())) {
throw new FormDataException("邮箱已经被注册");
}
}
user = new User();
user.setUsername(body.getUsername());
user.setEmail(body.getEmail());
user.setIcon(DEFAULT_ICON);
user.setPassword(HashUtil.sha1(HashUtil.md5(body.getPassword())));
user.setCreateTime(System.currentTimeMillis());
user.setLastLoginTime(System.currentTimeMillis());
user.setVersion(0);
userDao.addOne(user);
Map<String, String> data = new HashMap<>(1);
data.put("userId", String.valueOf(user.getUserId()));
return JwtUtil.encode(data, CommonConstant.jwtSecret, LONG_EXPIRE_TIME);
}
use of com.fanxb.bookmark.common.exception.FormDataException in project bookmark by FleyX.
the class UserServiceImpl method login.
/**
* Description: 登录
*
* @param body 登录表单
* @return string
* @author fanxb
* @date 2019/7/6 16:37
*/
public String login(LoginBody body) {
String key = RedisConstant.getUserFailCountKey(body.getStr());
String count = redisTemplate.opsForValue().get(key);
if (count != null && Integer.parseInt(count) >= LOGIN_COUNT) {
redisTemplate.expire(key, 30, TimeUnit.MINUTES);
throw new FormDataException("您已连续输错密码5次,请30分钟后再试,或联系管理员处理");
}
User userInfo = userDao.selectByUsernameOrEmail(body.getStr(), body.getStr());
if (userInfo == null || StrUtil.isEmpty(userInfo.getPassword()) || !HashUtil.sha1(HashUtil.md5(body.getPassword())).equals(userInfo.getPassword())) {
redisTemplate.opsForValue().set(key, count == null ? "1" : String.valueOf(Integer.parseInt(count) + 1), 30, TimeUnit.MINUTES);
throw new FormDataException("账号密码错误");
}
redisTemplate.delete(key);
userDao.updateLastLoginTime(System.currentTimeMillis(), userInfo.getUserId());
return JwtUtil.encode(Collections.singletonMap("userId", String.valueOf(userInfo.getUserId())), CommonConstant.jwtSecret, body.isRememberMe() ? LONG_EXPIRE_TIME : SHORT_EXPIRE_TIME);
}
Aggregations