Search

# 기본문제

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
복사

응답 데이터 형태 생성

요구사항의 형태에 맞게 구성한다.

User테이블