springboot过滤器拦截自定义异常

springboot 过滤器拦截自定义异常

参考网址:

java中拦截器与过滤器区别

https://blog.csdn.net/shaoming314/article/details/114281567

springboot过滤器与拦截器详解

https://blog.csdn.net/shaoming314/article/details/114287788

过滤器和拦截器的优先级

springboot中全局异常依赖于 @RestControllerAdvice

@RestControllerAdvice 基于 springmvc

而 过滤器 是 tomcat 的规范 , 所以 全局异常可以拦截 拦截器的异常 , 但是

过滤器的自定义异常我们需要手动进行处理

springboot过滤器拦截自定义异常_第1张图片

示例代码

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    String clientIP = ServletUtil.getClientIP((HttpServletRequest) servletRequest);
    log.info("【IpFilter 请求 IP】:{}", clientIP);
    if (LegalIp.IP_LIST.contains(clientIP)) {
        filterChain.doFilter(servletRequest, servletResponse);
        return;
    }else {
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.getWriter().println(JSONUtil.toJsonStr(new Result().error(ResultCodeEnum.CLIENT_IP_REFUSE_ERROR)));
        return;
    }

}

说明:

  1. 使用 servlet 中 HttpServletResponse 中 原生 api 响应给浏览器数据
  2. 处理之后一定要 return
    tResponse 中 原生 api 响应给浏览器数据
  3. 处理之后一定要 return
  4. 不手动抛出自定义异常 , 封装成数据 , 转换成 json 窜 , 响应给前端

你可能感兴趣的:(踩坑记录,spring,boot,java,servlet)