Spring Boot – WebFilter 활성화

By | 2023년 1월 20일
Table of Contents

Spring Boot – WebFilter 활성화

WebFilter 는 사용자 요청이 Controller 에 전달되기 이전에,
각종 로깅, 로그인 체크, 권한체크 등을 수행할 수 있습니다.

의존성 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

@ServletComponentScan 추가

@ServletComponentScan
@SpringBootApplication
public class WarehousewebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WarehousewebApplication.class, args);
    }
}

Filter 추가

@WebFilter("/*")
public class LoggingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        // HttpServletResponse httpServletResponse = (HttpServletResponse) response;

        System.out.println(httpServletRequest.getRequestURI());

        chain.doFilter(request, response);
    }
}

Filter 사용법

@WebFilter("/target")

// 와일드카드
@WebFilter("/*")

// 여러개
@WebFilter(value={"/target", "/target2"})
@WebFilter(urlPatterns={"/target", "/target2"})

Filter 에서 Exception 처리하기

@WebFilter("/*")
@RequiredArgsConstructor
public class AuthCheckFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;

        String authToken = httpServletRequest.getHeader("X-Auth-Token");
        if (authToken == null || authToken.equals("")) {
            // 커스텀 데이타
            ApiResponseMessage apiResponseMessage = new ApiResponseMessage(ResponseCode.UNAUTHORIZED);
            httpServletResponse.setStatus(RestExceptionHandler.CUSTOM_ERROR_CODE);
            httpServletResponse.setContentType("application/json");
            httpServletResponse.setCharacterEncoding("UTF-8");
            httpServletResponse.getWriter().write(convertObjectToJson(apiResponseMessage));
            return;
        }

        // ......

        chain.doFilter(httpServletRequest, httpServletResponse);
    }

    public String convertObjectToJson(Object object) throws JsonProcessingException {
        if (object == null) {
            return null;
        }
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(object);
    }
}

답글 남기기