저번 글에선 시큐리티 에러를 잡는 내용과 함께 시큐리티로 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만 허용하고 나머지는 차단된다.
'개발 및 잡담 > JAVA' 카테고리의 다른 글
[JAVA] 효율적인 트랜잭션? (feat. 마이바티스 foreach insert/update +시퀀스) (0) | 2023.09.07 |
---|---|
[JAVA] SpringSecurity 에서 WebSecurityConfigurerAdapter의 extends가 안될 때 (부제: 스프링 시큐리티 POST, GET 제외 차단) (0) | 2023.08.25 |
[JAVA] 데이터를 entity 형식에 맞게 변형 (0) | 2023.04.03 |
[JAVA] Bigdecimal 크기비교 (0) | 2023.04.03 |
댓글