API 처리 controller 생성
CustomFilter 생성
OncePerRequestFilter를 상속받아 CustomFilter 생성
OncePerRequestFilter란???
한번의 요청에서 한번만 filter를 적용하게 하기 위한 용도로 사용되는 클래스이며,
이는 한 요청이 여러번 같은 filter를 거치게 되면서 발생하는 서버 부하를 줄이기 위한 용도로 사용된다.
CustomFilter코드
package kr.co.polycube.backendtest._core.filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
import java.util.regex.Pattern;
@Component
public class CustomFilter extends OncePerRequestFilter {
private static final Pattern ALLOWED_CHARACTERS = Pattern.compile("[a-zA-Z0-9?&=:/]");
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String uri = request.getRequestURI();
String queryString = request.getQueryString();
// URI와 QueryString에 허용되지 않은 문자가 있는지 확인
if ((uri != null && containsDisallowedCharacters(uri)) ||
(queryString != null && containsDisallowedCharacters(queryString))) {
try {
throw new Exception("URL주소에 허용되지 않는 문자열이 있습니다.");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 허용된 문자만 포함된 경우 다음 필터로 요청을 전달
filterChain.doFilter(request, response);
}
// 허용되지 않는 문자열이 있으면 true를 반환
private boolean containsDisallowedCharacters(String value) {
for (char c : value.toCharArray()) {
if (!ALLOWED_CHARACTERS.matcher(String.valueOf(c)).matches()) {
return true;
}
}
return false;
}
}
Java
복사
application.yml설정 추가
server:
port: 8080
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: pc
password: 2024
h2:
console:
enabled: true
path: /h2-console
jpa:
hibernate:
ddl-auto: update
show-sql: true
Java
복사
응답 데이터 형태 생성
요구사항의 형태에 맞게 구성한다.