반응형
Rest api 서비스를 만들때에 우리가 외부/내부 서버들과 주고 받는 데이터의 유효성만 확인 되는 것이 첫번째일 것입니다.
하지만 해당 요청에 포함하는 파라미터들의 Encoding 정보를 수정하거나 헤더에 들어있는 정보들의 유효성 등을 Controller에 도달하기 전에 확인 한다면 우리가 중복될 수 있는 유효성 체크 등의 코드를 줄여 나갈 수 있습니다.
FilterRegistrationBean
@Component
@Order(1)
public class CustomFilter implements Filter {
// Filter 메서드 오버라이드
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
...
}
// 추가 메서드 ...
}
프로젝트의 설정 값들을 지정할 때에 @Component 어노테이션으로 class 위에 선언해 주고 Filter를 implements하여 Filter에서 전처리/후처리 메서드들을 오버라이드하여 필터 값을 지정할 수 있습니다.
ServletRequest/Response의 다양한 필터링을 사용할 수 있는 점이 유용하지만 직관성 있는 코드로 구현을 하고자 한다면 FilterRegistrationBean을 사용하는게 더 효율적이라고 생각됩니다.
@Component
public class Filters {
private CharacterEncodingFilter ansiFilter() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("ANSI");
filter.setForceEncoding(true);
return filter;
}
private CharacterEncodingFilter koreanFilter() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("EUC-KR");
filter.setForceEncoding(true);
return filter;
}
@Bean
public FilterRegistrationBean<CharacterEncodingFilter> setAnsiFilterBean() {
FilterRegistrationBean<CharacterEncodingFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(ansiFilter());
registrationBean.addUrlPatterns("/ansi/*");
return registrationBean;
}
@Bean
public FilterRegistrationBean<CharacterEncodingFilter> setKoreanFilterBean() {
FilterRegistrationBean<CharacterEncodingFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(koreanFilter());
registrationBean.addUrlPatterns("/korean/*");
return registrationBean;
}
}
url들의 encoding 방식들을 제어하는 간단한 예제를 만들어 보았습니다.
헤더 필터링, url 접근 제한등의 필터링도 이러한 방식으로 구현이 가능합니다.
반응형
'Spring Boot > etc' 카테고리의 다른 글
Spring boot 3.0 Pre-Update 내용 정리 (1) | 2022.11.14 |
---|---|
[Spring boot] url query string 안 보이게 처리하기 (0) | 2022.08.09 |
[Spring Boot] profile 지정하여 실행하고자 할때 (0) | 2022.02.16 |
[SSL 인증서] 인증서 적용하고 Https 통신하자! (0) | 2022.02.15 |
[설정] Spring boot profile 나누는 법 (Intellij Community) (0) | 2022.02.15 |