今天继续跟着视频学习网页开发,完成了增添员工功能,进一步学习了数据库调用,mybatis @Insert @AutoFill等用法,代码实现如下
@PostMapping @ApiOperation(value = "新增员工") public Result save(@RequestBody EmployeeDTO employeeDTO) { log.info("新增员工{}", employeeDTO); employeeService.save(employeeDTO); return Result.success(); } @Override public void save(EmployeeDTO employeeDTO) { Employee employee = new Employee();
// 对象属性拷贝
BeanUtils.copyProperties(employeeDTO, employee);
// 设置账号状态
employee.setStatus(StatusConstant.ENABLE);
// 设置密码
employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));
// 设置创建时间和修改时间
LocalDateTime now = LocalDateTime.now();
employee.setCreateTime(now);
employee.setUpdateTime(now);
// 记录创建人和修改人ID
Long id = BaseContext.getCurrentId();
employee.setCreateUser(id);
employee.setUpdateUser(id);
employeeMapper.insert(employee);
}
@Insert("insert into employee (name, username, password, phone, sex, id_number, create_time, update_time, create_user, update_user,status) " + "values "+"(#{name},#{username},#{password},#{phone},#{sex},#{idNumber},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})") @AutoFill(value = OperationType.INSERT) void insert(Employee employee); 但在进行接口测试时出现异常, 最后发现是令牌校验失败,测试时没有令牌, public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //判断当前拦截到的是Controller的方法还是其他资源 if (!(handler instanceof HandlerMethod)) { //当前拦截到的不是动态方法,直接放行 return true; }
//1、从请求头中获取令牌
String token = request.getHeader(jwtProperties.getUserTokenName());
//2、校验令牌
try {
log.info("jwt校验:{}", token);
Claims claims = JwtUtil.parseJWT(jwtProperties.getUserSecretKey(), token);
Long userId = Long.valueOf(claims.get(JwtClaimsConstant.USER_ID).toString());
log.info("当前用户id:{}", userId);
//3、通过,放行
// 存储当前登录员工id
BaseContext.setCurrentId(userId);
return true;
} catch (Exception ex) {
//4、不通过,响应401状态码
response.setStatus(401);
return false;
}
}
原来是被拦截器拦截,然后通过登录接口返回的token输入,成功通过。