Search in sources :

Example 1 with FormDataException

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;
}
Also used : User(com.fanxb.bookmark.common.entity.po.User) FormDataException(com.fanxb.bookmark.common.exception.FormDataException)

Example 2 with FormDataException

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;
}
Also used : Path(java.nio.file.Path) FormDataException(com.fanxb.bookmark.common.exception.FormDataException)

Example 3 with FormDataException

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());
}
Also used : User(com.fanxb.bookmark.common.entity.po.User) FormDataException(com.fanxb.bookmark.common.exception.FormDataException)

Example 4 with FormDataException

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);
}
Also used : User(com.fanxb.bookmark.common.entity.po.User) FormDataException(com.fanxb.bookmark.common.exception.FormDataException)

Example 5 with FormDataException

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);
}
Also used : User(com.fanxb.bookmark.common.entity.po.User) FormDataException(com.fanxb.bookmark.common.exception.FormDataException)

Aggregations

FormDataException (com.fanxb.bookmark.common.exception.FormDataException)5 User (com.fanxb.bookmark.common.entity.po.User)4 Path (java.nio.file.Path)1