본문 바로가기
개발 및 잡담/JAVA

[JAVA] Servlet Filter를 이용하여 POST,GET 요청만 허용하고 나머지 차단하기

by 아는게 없어 항상 몰라 2023. 8. 28.

저번 글에선 시큐리티 에러를 잡는 내용과 함께 시큐리티로 POST와 GET만 허용하는 방법을 소개했다.

 

이번 글에선 시큐리티를 사용하지 않는 방법을 알아보자

 

 

먼저, 클래스를 하나 만들어주자

public class HttpMethodFilter implements Filter{

	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
			throws IOException, ServletException {
		
        HttpServletRequest request = (HttpServletRequest) servletRequest; // 형변환
        HttpServletResponse response = (HttpServletResponse) servletResponse; // 형변환
        String method = request.getMethod();
        
        if ("GET".equals(method) || "POST".equals(method)) {
        // true 조건 : method가 GET 또는 POST
            chain.doFilter(servletRequest, servletResponse); 
        } else {
            // 다른 요청은 차단하고 에러 응답을 보냄
            response.getWriter().write("Only GET and POST requests are allowed."); // 에러 메세지
            response.setStatus(HttpServletResponse.SC_FORBIDDEN); // Forbidden 상태 코드 설정(403)
        }
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 초기화 코드
    }

    @Override
    public void destroy() {
        // 필터 파괴 시 호출되는 코드
    }

}

 

init()에선 Filter를 초기화한다. 보안 설정 초기화, 리소스 할당 초기화 등을 초기에 실행 후 doFilter가 실행된다.

destroy()는 필터가 더 이상 사용되지 않을 때 호출된다. 리소스 해제, 정리 작업 수행 등을 하는 곳

즉, init() ㅡ> doFilter() ㅡ> destroy() 순으로 진행된다

 

 

그 다음엔 프로젝트를 실행하는 application.java에 Bean을 등록해주자

@SpringBootApplication
public class ClassNameApplication {

	public static void main(String[] args) {
		SpringApplication.run(ClassNameApplication.class, args);
	}

	
    @Bean
    public FilterRegistrationBean<HttpMethodFilter> httpMethodFilter() {
        FilterRegistrationBean<HttpMethodFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new HttpMethodFilter());
        registrationBean.addUrlPatterns("/*"); // 모든 요청에 대해 필터 적용
        return registrationBean;
    }
}

 

 

이후 실행을 하면 모든 요청에 대하여 POST와 GET만 허용하고 나머지는 차단된다.

 

댓글