반응형
1. 기본 동작
Spring MVC 요청 처리 순서로 인해 Filter에서 막으면 제일 빠르다.
| 단계 | 구성요소 | 예 |
| 1 | Filter (가장 먼저) | AccessMenuFilter, Spring Security 내부 필터 등 |
| 2 | Spring Security Filter | SecurityConfig의 httpSecurity.antMatchers() |
| 3 | DispatcherServlet | 서블릿 매핑 (*.do, *.json 등) |
| 4 | Interceptor | preHandle(), postHandle() |
| 5 | Controller | @RequestMapping, @RestController |
| 6 | ExceptionHandler | @ControllerAdvice 전역 예외처리 |
2. 코드 안내
DevToolsIgnoreFilter.java
public class DevToolsIgnoreFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 초기화 필요 시 작성
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getRequestURI();
// 크롬 개발자 도구 자동 요청이나 인증 경로 무시
if (uri.contains(".well-known") || uri.contains("com.chrome.devtools.json")) {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write("{\"status\": \"ok\", \"message\": \"Chrome DevTools auto request ignored\"}");
return;
}
// 나머지는 정상 흐름대로 진행
chain.doFilter(request, response);
}
@Override
public void destroy() {
// 리소스 해제 필요 시 작성
}
}
3. 추가사항
❗인텔리제이에서는 해당 필터로만 처리하면 404에러가 뜨지 않고 무시되는데
이클립스에서는 여전히 404 에러가 생길 수 있다. 이것은 서버 구동 환경의 차이 때문인데 ..
1. Eclipse WTP는 요청을 무조건 DispatcherServlet으로 보냄
- favicon.ico 요청도 내부적으로 DispatcherServlet (즉, Spring Controller)로 포워딩됨.
- 그래서 Controller에서 해당 경로 못 찾으면 404가 뜸
- javax.servlet.forward.* 로그에 보이는 것도 그 포워딩 흐름 때문
2. IntelliJ는 Tomcat에 직접 배포되는 방식이라 필터만으로 잘 걸러짐
- 그래서 필터에서 return 하면 더 이상 Spring까지 안 가고 종료
- 404 로그도 안 남고 완전 무시됨
그래서 이클립스에서도 404에러가 나지 않게 하려면
필터 위치를 확인해서 해당 필터가 DispatcherServlet 앞에 실행되야한다.
web.xml
<!-- # 필터 정의 -->
<filter>
<filter-name>DevToolsIgnoreFilter</filter-name>
<filter-class>kr.or.farm.cmmn.interceptor.AccessMenuFilter</filter-class>
</filter>
<!-- # 그 다음 매핑 전부 정리 -->
<filter-mapping>
<filter-name>AccessMenuFilter</filter-name>
<url-pattern>/favicon.ico</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AccessMenuFilter</filter-name>
<url-pattern>/.well-known/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AccessMenuFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
...
이렇게 하면 해당 페이지가 404에러 없이 무시된다.
반응형
'🗄️ 백엔드 > 🍃Spring' 카테고리의 다른 글
| # HWP 템플릿에 동적으로 ROW 삽입하는 방법 (전자정부프레임워크 + MyBatis) (0) | 2025.07.01 |
|---|---|
| # 접근제어 인터셉터(interceptor) vs 필터(filter) 뭐가 나을까? 차이점 (1) | 2025.06.17 |
| # SSL 인증서 문제(PKIX path building failed) 임시 인증 무시 (테스트용) (0) | 2025.06.13 |
| # Spring Boot - POI로 엑셀 다운로드 기능 만들기 (maven) (1) | 2025.06.04 |
| # Spring boot - Logback Slf4j를 사용해서 에러 로그기록하기 (maven) (0) | 2025.06.02 |