无关风月
2025-02-14 11ec1c23a9f47ed70b124e413e33e3696897390f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;
        }
    }
}