后台数据校验优化

This commit is contained in:
xiongxiaoyang 2020-12-22 23:12:22 +08:00
parent 612555dbe6
commit 1046a7ffc1
8 changed files with 78 additions and 62 deletions

View File

@ -1,21 +1,30 @@
package com.java2nb.novel.core.advice; package com.java2nb.novel.core.advice;
import com.java2nb.novel.core.bean.ResultBean; import com.java2nb.novel.core.bean.ResultBean;
import com.java2nb.novel.core.enums.ResponseStatus;
import com.java2nb.novel.core.exception.BusinessException; import com.java2nb.novel.core.exception.BusinessException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice;
/** /**
* 通用的异常处理器 * 通用的异常处理器
* *
* @author 11797*/ * @author 11797*/
@Slf4j @Slf4j
@ControllerAdvice @RestControllerAdvice
@ResponseBody
public class CommonExceptionHandler { public class CommonExceptionHandler {
/**
* 处理后台数据校验异常
* */
@ExceptionHandler(BindException.class)
public ResultBean handlerBindException(BindException e){
log.error(e.getMessage(),e);
return ResultBean.fail(ResponseStatus.PARAM_ERROR);
}
/** /**
* 处理业务异常 * 处理业务异常
* */ * */

View File

@ -0,0 +1,11 @@
package com.java2nb.novel.core.valid;
/**
* 新增数据的校验分组
* @author xiongxiaoyang
*/
public interface AddGroup {
}

View File

@ -0,0 +1,11 @@
package com.java2nb.novel.core.valid;
/**
* 更新数据的校验分组
* @author xiongxiaoyang
*/
public interface UpdateGroup {
}

View File

@ -1,36 +1,56 @@
package com.java2nb.novel.entity; package com.java2nb.novel.entity;
import com.java2nb.novel.core.valid.AddGroup;
import com.java2nb.novel.core.valid.UpdateGroup;
import java.util.Date; import java.util.Date;
import javax.annotation.Generated; import javax.annotation.Generated;
import javax.validation.constraints.*;
public class User { public class User {
@Null(groups = {AddGroup.class, UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private Long id; private Long id;
@NotBlank(groups = {AddGroup.class},message="手机号不能为空!")
@Pattern(groups = {AddGroup.class},regexp="^1[3|4|5|6|7|8|9][0-9]{9}$",message="手机号格式不正确!")
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private String username; private String username;
@NotBlank(groups = {AddGroup.class},message="密码不能为空!")
@Null(groups = {UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private String password; private String password;
@Null(groups = {AddGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private String nickName; private String nickName;
@Null(groups = {AddGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private String userPhoto; private String userPhoto;
@Null(groups = {AddGroup.class})
@Min(value = 0,groups = {UpdateGroup.class})
@Max(value = 1,groups = {UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private Byte userSex; private Byte userSex;
@Null(groups = {AddGroup.class,UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private Long accountBalance; private Long accountBalance;
@Null(groups = {AddGroup.class,UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private Byte status; private Byte status;
@Null(groups = {AddGroup.class,UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private Date createTime; private Date createTime;
@Null(groups = {AddGroup.class,UpdateGroup.class})
@Generated("org.mybatis.generator.api.MyBatisGenerator") @Generated("org.mybatis.generator.api.MyBatisGenerator")
private Date updateTime; private Date updateTime;

View File

@ -6,15 +6,16 @@ import com.java2nb.novel.core.bean.UserDetails;
import com.java2nb.novel.core.cache.CacheService; import com.java2nb.novel.core.cache.CacheService;
import com.java2nb.novel.core.enums.ResponseStatus; import com.java2nb.novel.core.enums.ResponseStatus;
import com.java2nb.novel.core.utils.RandomValidateCodeUtil; import com.java2nb.novel.core.utils.RandomValidateCodeUtil;
import com.java2nb.novel.core.valid.AddGroup;
import com.java2nb.novel.core.valid.UpdateGroup;
import com.java2nb.novel.entity.User; import com.java2nb.novel.entity.User;
import com.java2nb.novel.entity.UserBuyRecord; import com.java2nb.novel.entity.UserBuyRecord;
import com.java2nb.novel.form.UserForm;
import com.java2nb.novel.service.BookService; import com.java2nb.novel.service.BookService;
import com.java2nb.novel.service.UserService; import com.java2nb.novel.service.UserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -42,12 +43,7 @@ public class UserController extends BaseController {
* 登陆 * 登陆
*/ */
@PostMapping("login") @PostMapping("login")
public ResultBean login(@Valid UserForm user, BindingResult result) { public ResultBean login(User user) {
//判断参数是否合法
if (result.hasErrors()) {
log.info(result.getAllErrors().toString());
return ResultBean.fail(ResponseStatus.PARAM_ERROR);
}
//登陆 //登陆
UserDetails userDetails = userService.login(user); UserDetails userDetails = userService.login(user);
@ -64,13 +60,8 @@ public class UserController extends BaseController {
* 注册 * 注册
*/ */
@PostMapping("register") @PostMapping("register")
public ResultBean register(@Valid UserForm user, @RequestParam(value = "velCode", defaultValue = "") String velCode, BindingResult result) { public ResultBean register(@Validated({AddGroup.class}) User user, @RequestParam(value = "velCode", defaultValue = "") String velCode) {
//判断参数是否合法
if (result.hasErrors()) {
log.info(result.getAllErrors().toString());
return ResultBean.fail(ResponseStatus.PARAM_ERROR);
}
//判断验证码是否正确 //判断验证码是否正确
if (!velCode.equals(cacheService.get(RandomValidateCodeUtil.RANDOM_CODE_KEY))) { if (!velCode.equals(cacheService.get(RandomValidateCodeUtil.RANDOM_CODE_KEY))) {
@ -225,7 +216,7 @@ public class UserController extends BaseController {
* 更新个人信息 * 更新个人信息
* */ * */
@PostMapping("updateUserInfo") @PostMapping("updateUserInfo")
public ResultBean updateUserInfo(User user,HttpServletRequest request) { public ResultBean updateUserInfo(@Validated({UpdateGroup.class}) User user, HttpServletRequest request) {
UserDetails userDetails = getUserDetails(request); UserDetails userDetails = getUserDetails(request);
if (userDetails == null) { if (userDetails == null) {
return ResultBean.fail(ResponseStatus.NO_LOGIN); return ResultBean.fail(ResponseStatus.NO_LOGIN);

View File

@ -1,20 +0,0 @@
package com.java2nb.novel.form;
import lombok.Data;
import javax.annotation.Generated;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Data
public class UserForm {
@NotBlank(message="手机号不能为空!")
@Pattern(regexp="^1[3|4|5|6|7|8|9][0-9]{9}$",message="手机号格式不正确!")
@Generated("org.mybatis.generator.api.MyBatisGenerator")
private String username;
@NotBlank(message="密码不能为空!")
@Generated("org.mybatis.generator.api.MyBatisGenerator")
private String password;
}

View File

@ -3,7 +3,6 @@ package com.java2nb.novel.service;
import com.java2nb.novel.core.bean.UserDetails; import com.java2nb.novel.core.bean.UserDetails;
import com.java2nb.novel.entity.UserBuyRecord; import com.java2nb.novel.entity.UserBuyRecord;
import com.java2nb.novel.form.UserForm;
import com.java2nb.novel.vo.BookReadHistoryVO; import com.java2nb.novel.vo.BookReadHistoryVO;
import com.java2nb.novel.vo.BookShelfVO; import com.java2nb.novel.vo.BookShelfVO;
import com.java2nb.novel.entity.User; import com.java2nb.novel.entity.User;
@ -19,17 +18,17 @@ public interface UserService {
/** /**
* 用户注册 * 用户注册
* @param form 用户注册提交信息类 * @param user 用户注册信息类
* @return jwt载体信息类 * @return jwt载体信息类
* */ * */
UserDetails register(UserForm form); UserDetails register(User user);
/** /**
* 用户登陆 * 用户登陆
* @param form 用户登陆提交信息类 * @param user 用户登陆信息类
* @return jwt载体信息类 * @return jwt载体信息类
* */ * */
UserDetails login(UserForm form); UserDetails login(User user);
/** /**
* 查询小说是否已加入书架 * 查询小说是否已加入书架

View File

@ -5,7 +5,6 @@ import com.java2nb.novel.core.bean.UserDetails;
import com.java2nb.novel.core.utils.BeanUtil; import com.java2nb.novel.core.utils.BeanUtil;
import com.java2nb.novel.entity.*; import com.java2nb.novel.entity.*;
import com.java2nb.novel.entity.User; import com.java2nb.novel.entity.User;
import com.java2nb.novel.form.UserForm;
import com.java2nb.novel.service.UserService; import com.java2nb.novel.service.UserService;
import com.java2nb.novel.core.enums.ResponseStatus; import com.java2nb.novel.core.enums.ResponseStatus;
import com.java2nb.novel.core.exception.BusinessException; import com.java2nb.novel.core.exception.BusinessException;
@ -29,7 +28,6 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import static com.java2nb.novel.mapper.BookDynamicSqlSupport.book;
import static com.java2nb.novel.mapper.BookDynamicSqlSupport.id; import static com.java2nb.novel.mapper.BookDynamicSqlSupport.id;
import static com.java2nb.novel.mapper.UserBookshelfDynamicSqlSupport.userBookshelf; import static com.java2nb.novel.mapper.UserBookshelfDynamicSqlSupport.userBookshelf;
import static com.java2nb.novel.mapper.UserDynamicSqlSupport.*; import static com.java2nb.novel.mapper.UserDynamicSqlSupport.*;
@ -59,11 +57,11 @@ public class UserServiceImpl implements UserService {
@Override @Override
public UserDetails register(UserForm form) { public UserDetails register(User user) {
//查询用户名是否已注册 //查询用户名是否已注册
SelectStatementProvider selectStatement = select(count(id)) SelectStatementProvider selectStatement = select(count(id))
.from(user) .from(UserDynamicSqlSupport.user)
.where(username, isEqualTo(form.getUsername())) .where(username, isEqualTo(user.getUsername()))
.build() .build()
.render(RenderingStrategies.MYBATIS3); .render(RenderingStrategies.MYBATIS3);
long count = userMapper.count(selectStatement); long count = userMapper.count(selectStatement);
@ -72,7 +70,7 @@ public class UserServiceImpl implements UserService {
throw new BusinessException(ResponseStatus.USERNAME_EXIST); throw new BusinessException(ResponseStatus.USERNAME_EXIST);
} }
User entity = new User(); User entity = new User();
BeanUtils.copyProperties(form,entity); BeanUtils.copyProperties(user,entity);
//数据库生成注册记录 //数据库生成注册记录
Long id = new IdWorker().nextId(); Long id = new IdWorker().nextId();
entity.setId(id); entity.setId(id);
@ -91,12 +89,12 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public UserDetails login(UserForm form) { public UserDetails login(User user) {
//根据用户名密码查询记录 //根据用户名密码查询记录
SelectStatementProvider selectStatement = select(id, username,nickName) SelectStatementProvider selectStatement = select(id, username,nickName)
.from(user) .from(UserDynamicSqlSupport.user)
.where(username, isEqualTo(form.getUsername())) .where(username, isEqualTo(user.getUsername()))
.and(password, isEqualTo(MD5Util.MD5Encode(form.getPassword(), Charsets.UTF_8.name()))) .and(password, isEqualTo(MD5Util.MD5Encode(user.getPassword(), Charsets.UTF_8.name())))
.build() .build()
.render(RenderingStrategies.MYBATIS3); .render(RenderingStrategies.MYBATIS3);
List<User> users = userMapper.selectMany(selectStatement); List<User> users = userMapper.selectMany(selectStatement);
@ -105,10 +103,10 @@ public class UserServiceImpl implements UserService {
} }
//生成UserDetail对象并返回 //生成UserDetail对象并返回
UserDetails userDetails = new UserDetails(); UserDetails userDetails = new UserDetails();
User user = users.get(0); user = users.get(0);
userDetails.setId(user.getId()); userDetails.setId(user.getId());
userDetails.setNickName(user.getNickName()); userDetails.setNickName(user.getNickName());
userDetails.setUsername(form.getUsername()); userDetails.setUsername(user.getUsername());
return userDetails; return userDetails;
} }
@ -232,12 +230,9 @@ public class UserServiceImpl implements UserService {
@Override @Override
public void updateUserInfo(Long userId, User user) { public void updateUserInfo(Long userId, User user) {
User updateUser = new User(); user.setId(userId);
updateUser.setId(userId); user.setUpdateTime(new Date());
updateUser.setNickName(user.getNickName()); userMapper.updateByPrimaryKeySelective(user);
updateUser.setUserSex(user.getUserSex());
updateUser.setUpdateTime(new Date());
userMapper.updateByPrimaryKeySelective(updateUser);
} }