/**
* 检查用户是否登录
*/
@Slf4j
@WebFilter(filterName = "loginCheckFilter",urlPatterns = "/*") //拦截所有的请求
public class LoginCheckFilter implements Filter {
//请求匹配器
public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//1.获取本次请求的uri
String requestURI = request.getRequestURI();
//不需要处理的请求
String[] urls = new String[]{
"/employee/login",
"/employee/logout",
"/backend/**",
"/front/**",
};
//2.判断请求是否需要处理
boolean check = check(urls, requestURI);
//3.如果不需要处理直接放行
if (check == true){
filterChain.doFilter(request,response);//放行
return;
}
//4.判断登录状态,如果已登录,则直接放行
if(request.getSession().getAttribute("employee") != null){
filterChain.doFilter(request,response);
return;
}
//5.如果为登录则返回未登录结果,通过输出流方式向客户端页面响应数据
response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
return;
}
/**
* 请求判断
* @param urls
* @param requestURI
* @return
*/
public boolean check(String[] urls,String requestURI){
for (String url:urls){
boolean match = PATH_MATCHER.match(url, requestURI);
if (match){
return true;
}
}
return false;
}
}
登录处理用户名相同时:定义异常类处理
/**
* 全局异常处理
*/
@ControllerAdvice(annotations = {RestController.class, Controller.class})//拦截
@ResponseBody //封装成json数据
@Slf4j
public class GlobalExceptionHandler {
/**
* 异常处理方法 自定义异常类
* @return
*/
@ExceptionHandler(SQLIntegrityConstraintViolationException.class)
public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){ //异常提示SQLIntegrityConstraintViolationException
log.info(ex.getMessage());//输出异常信息
if (ex.getMessage().contains("Duplicate entry")){ //判断异常信息包含Duplicate entry
String[] split = ex.getMessage().split(" ");
String msg = split[2] + "已存在";
return R.error(msg);
}
return R.error("未知错误");
}
}
分页功能分析
@GetMapping("/page")
public R<Page> page(int page,int pageSize,String name){
log.info("page {},pageSize {},name {}",page,pageSize,name);
//构造分页的构造器
Page pageinfo = new Page(page,pageSize);
//构造条件构造器
LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();
//Employee::getUpdateTime 可以取出get set方法获得属性值设置属性值
//添加筛选条件
queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);
//添加排序条件
queryWrapper.orderByDesc(Employee::getUpdateTime);
//执行查询
employeeService.page(pageinfo,queryWrapper);
return R.success(pageinfo);
}
前端返回数据精度丢失(id)
把前端的json数据先转换为string类型
/**
* 根据ID修改员工信息
* @param request
* @param employee
* @return
*/
@PutMapping
public R<String> update(HttpServletRequest request,@RequestBody Employee employee){
log.info(employee.toString());
Long empId = (Long) request.getSession().getAttribute("employee");
employee.setUpdateTime(LocalDateTime.now());
employee.setUpdateUser(empId);
employeeService.updateById(employee);
return R.success("信息修改成功");
}
@GetMapping("/{id}")
public R<Employee> getById(@PathVariable Long id){
log.info("id");
Employee employee = employeeService.getById(id);
if (employee != null){
return R.success(employee);
}
return R.error("信息错误");
}