package com.jilongda.common.security; import com.jilongda.common.basic.ApiResult; import com.jilongda.common.exception.ServiceException; import com.jilongda.common.exception.TokenException; import com.jilongda.common.utils.ResponseUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author liheng * @ClassName ExceptionHandleFilter * @Description 最外层filter处理验证token、登录认证和授权过滤器中抛出的所有异常 * @date 2020-08-24 9:31 */ @Slf4j public class ExceptionHandleFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) { // 全局异常无法捕捉过滤器异常,需在此处做处理 try { filterChain.doFilter(httpServletRequest, httpServletResponse); } catch (Exception e) { // 如果是业务异常,需返回状态码 if (e instanceof ServiceException) { ServiceException e1 = (ServiceException) e; ResponseUtils.renderJson(httpServletResponse, ApiResult.failed(e1.getCode(), e.getMessage())); } else if (e instanceof TokenException) { TokenException e1 = (TokenException) e; ResponseUtils.renderJson(httpServletResponse, ApiResult.failed(e1.getCode(), e.getMessage())); } else { ResponseUtils.renderJson(httpServletResponse, ApiResult.failed(e.getMessage())); } return; } } }