부록 A. 참고 자료
A.1. Undertow 핸들러 제공
핸들러의 전체 목록을 보려면 JBoss EAP 설치의 Undertow 코어와 일치하는 버전에서 Undertow 코어의 소스 JAR 파일을 확인해야 합니다. JBoss EAP Maven 리포지토리에서 Undertow 핵심 소스 JAR 파일을 다운로드한 다음 /io/undertow/server/handlers/ 디렉터리에서 사용 가능한 핸들러를 참조할 수 있습니다.
아래 예제와 유사하게 server.log 파일에서 JBoss EAP 서버 시작 중에 출력되는 INFO 메시지를 검색하여 JBoss EAP의 현재 설치에 사용된 Undertow 코어 버전을 확인할 수 있습니다.
INFO [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0003: Undertow 1.4.18.Final-redhat-1 starting
AccessControlListHandler
클래스 이름: io.undertow.server.handlers.AccessControlListHandler
이름: access-control
원격 피어의 특성에 따라 요청을 수락하거나 거부할 수 있는 핸들러.
표 A.1. 매개 변수
| 이름 | 설명 |
|---|---|
| ACL | ACL 규칙. 이 매개 변수는 필수입니다. |
| attribute | 교환 특성 문자열. 이 매개 변수는 필수입니다. |
| default-allow |
핸들러가 기본적으로 요청을 수락하거나 거부할지 여부를 지정하는 부울입니다. 기본값은 |
AccessLogHandler
클래스 이름: io.undertow.server.handlers.accesslog.AccessLogHandler
이름: access-log
로그 핸들러 액세스. 이 핸들러는 제공된 형식 문자열을 기반으로 액세스 로그 메시지를 생성하고 제공된 AccessLogReceiver 에 이러한 메시지를 전달합니다.
이 핸들러는 ExchangeAttribute 메커니즘을 통해 제공된 모든 특성을 로깅할 수 있습니다.
이 팩토리는 다음 패턴에 대한 토큰 핸들러를 생성합니다.
표 A.2. 패턴
| 패턴 | 설명 |
|---|---|
| %a | 원격 IP 주소 |
| %A | 로컬 IP 주소 |
| %b |
HTTP 헤더를 제외하고 전송된 바이트 또는 바이트가 없는 경우 |
| %B | HTTP 헤더를 제외하고 전송된 바이트 |
| %h | 원격 호스트 이름 |
| %H | 요청 프로토콜 |
| %l |
원격 논리 사용자 이름 from |
| %m | 요청 방법 |
| %p | 로컬 포트 |
| %q |
쿼리 문자열 ( |
| %r | 요청의 첫 번째 행 |
| %s | 응답의 HTTP 상태 코드 |
| %t | 날짜 및 시간(일반 로그 형식) |
| %u | 인증된 원격 사용자 |
| %U | 요청된 URL 경로 |
| %v | 로컬 서버 이름 |
| %D | 요청을 처리하는 데 걸린 시간(밀리초) |
| %T | 요청을 처리하는 데 걸리는 시간(초) |
| %I | 현재 요청 스레드 이름 (나중에 스택 추적과 비교할 수 있음) |
| Common |
|
| 결합 |
|
쿠키, 수신 헤더 또는 세션에서 정보를 작성할 수도 있습니다.
Apache 구문 다음에 모델링됩니다.
-
수신 헤더의
%{I,xxx} -
나가는 응답 헤더의
%{O,xxx} -
특정 쿠키를 위한
%{C,xxx} -
%{R,xxx}여기서xxx는ServletRequest의 속성입니다. -
%{s,xxx}여기서xxx는HttpSession의 속성입니다.
표 A.3. 매개 변수
| 이름 | 설명 |
|---|---|
| 포맷 | 로그 메시지를 생성하는 데 사용되는 형식입니다. 기본 매개변수 입니다. |
AllowedMethodsHandler
특정 HTTP 메서드를 허용 목록에 추가하는 핸들러입니다. 허용된 메서드 집합에 메서드가 있는 요청만 계속할 수 있습니다.
클래스 이름: io.undertow.server.handlers.AllowedMethodsHandler
이름: allowed-methods
표 A.4. 매개 변수
| 이름 | 설명 |
|---|---|
| 방법 |
|
BlockingHandler
차단 요청을 시작하는 HttpHandler입니다. 스레드가 현재 I/O 스레드에서 실행 중인 경우 디스패치됩니다.
클래스 이름: io.undertow.server.handlers.BlockingHandler
이름: 차단
이 핸들러에는 매개 변수가 없습니다.
ByteRangeHandler
범위 요청에 대한 핸들러입니다. 이는 고정된 콘텐츠 길이의 모든 리소스에 대한 범위 요청을 처리할 수 있는 일반 핸들러입니다(예: content-length 헤더가 설정된 모든 리소스). 전체 콘텐츠가 생성되고 삭제되므로 이 방법이 범위 요청을 처리하는 가장 효율적인 방법은 아닙니다. 현재 이 핸들러는 단순한 단일 범위 요청만 처리할 수 있습니다. 여러 범위가 요청되면 Range 헤더가 무시됩니다.
클래스 이름: io.undertow.server.handlers.ByteRangeHandler
이름: byte-range
표 A.5. 매개 변수
| 이름 | 설명 |
|---|---|
| send-accept-ranges | 허용 범위를 보낼지 여부에 대한 부울 값입니다. 기본 매개변수 입니다. |
CanonicalPathHandler
이 핸들러는 정식 경로에 대한 상대 경로를 변환합니다.
클래스 이름: io.undertow.server.handlers.CanonicalPathHandler
이름: Canonical-path
이 핸들러에는 매개 변수가 없습니다.
DisableCacheHandler
브라우저 및 프록시의 응답 캐싱을 비활성화하는 핸들러.
클래스 이름: io.undertow.server.handlers.DisableCacheHandler
이름: disable-cache
이 핸들러에는 매개 변수가 없습니다.
DisallowedMethodsHandler
특정 HTTP 메서드를 블랙리스트로 지정하는 핸들러입니다.
클래스 이름: io.undertow.server.handlers.DisallowedMethodsHandler
이름: disallowed-methods
표 A.6. 매개 변수
| 이름 | 설명 |
|---|---|
| 방법 |
|
EncodingHandler
이 핸들러는 콘텐츠 인코딩 구현의 기초 역할을 합니다. 인코딩 핸들러는 지정된 서버 측 우선 순위와 함께 이 핸들러에 위임으로 추가됩니다.
q 값은 올바른 핸들러를 결정하는 데 사용됩니다. q 값이 없는 요청이 도착하면 서버에서 사용할 인코딩으로 우선 순위가 가장 높은 핸들러를 선택합니다.
일치하는 핸들러가 없으면 ID 인코딩이라고 가정합니다. q 값이 0 으로 인해 ID 인코딩이 구체적으로 허용되지 않은 경우 핸들러는 응답 코드 406(수용되지 않음) 을 설정하고 반환합니다.
클래스 이름: io.undertow.server.handlers.encoding.EncodingHandler
이름: 압축
이 핸들러에는 매개 변수가 없습니다.
FileErrorPageHandler
오류 페이지 역할을 하기 위해 디스크에서 파일을 제공하는 핸들러입니다. 이 핸들러는 기본적으로 응답하는 응답 코드를 구성하지 않으므로 응답하는 응답 코드를 구성해야 합니다.
클래스 이름: io.undertow.server.handlers.error.FileErrorPageHandler
이름: error-file
표 A.7. 매개 변수
| 이름 | 설명 |
|---|---|
| file | 오류 페이지로 사용할 파일의 위치. |
| response-codes | 정의된 오류 페이지 파일로 리디렉션되는 응답 코드 목록입니다. |
HttpTraceHandler
HTTP 추적 요청을 처리하는 핸들러입니다.
클래스 이름: io.undertow.server.handlers.HttpTraceHandler
이름: trace
이 핸들러에는 매개 변수가 없습니다.
IPAddressAccessControlHandler
원격 피어의 IP 주소를 기반으로 요청을 수락하거나 거부할 수 있는 핸들러입니다.
클래스 이름: io.undertow.server.handlers.IPAddressAccessControlHandler
이름: ip-access-control
표 A.8. 매개 변수
| 이름 | 설명 |
|---|---|
| ACL | 액세스 제어 목록을 나타내는 문자열입니다. 기본 매개변수 입니다. |
| failure-status | 거부된 요청에 반환할 상태 코드를 나타내는 정수입니다. |
| default-allow | 부울은 기본적으로 허용 여부를 나타냅니다. |
JDBCLogHandler
클래스 이름: io.undertow.server.handlers.JDBCLogHandler
이름: jdbc-access-log
표 A.9. 매개 변수
| 이름 | 설명 |
|---|---|
| 포맷 |
JDBC 로그 패턴을 지정합니다. 기본값은 |
| 데이터 소스 | 로깅할 데이터 소스의 이름입니다. 이 매개 변수는 필수이며 기본 매개변수 입니다. |
| tableName | 테이블 이름. |
| remoteHostField | 원격 호스트 주소. |
| userField | 사용자 이름. |
| timestampField | 타임스탬프. |
| virtualHostField | VirtualHost. |
| methodField | 메서드. |
| queryField | 쿼리. |
| statusField | 상태. |
| bytesField | 바이트. |
| refererField | 참조자. |
| userAgentField | userAgent. |
LearningPushHandler
브라우저에서 요청하는 리소스 캐시를 빌드하고 server push를 사용하여 지원 시 푸시하는 핸들러.
클래스 이름: io.undertow.server.handlers.LearningPushHandler
이름: learning-push
표 A.10. 매개 변수
| 이름 | 설명 |
|---|---|
| 최대 크기 | 캐시 항목의 최대 시간을 나타내는 정수입니다. |
| max-entries | 최대 캐시 항목 수를 나타내는 정수 |
LocalNameResolvingHandler
로컬 주소를 확인하기 위해 DNS 조회를 수행하는 핸들러입니다. 프론트엔드 서버에서 X-forwarded-host 헤더 또는 AJP가 사용 중인 경우 확인되지 않은 로컬 주소를 만들 수 있습니다.
클래스 이름: io.undertow.server.handlers.LocalNameResolvingHandler
이름: resolve-local-name
이 핸들러에는 매개 변수가 없습니다.
PathSeparatorHandler
URL의 슬래시 구분 기호가 아닌 문자를 슬래시로 변환하는 핸들러입니다. 일반적으로 Windows 시스템에서 역슬래시를 슬래시로 변환합니다.
클래스 이름: io.undertow.server.handlers.PathSeparatorHandler
이름: path-separator
이 핸들러에는 매개 변수가 없습니다.
PeerNameResolvingHandler
역방향 DNS 조회를 수행하여 피어 주소를 확인하는 핸들러입니다.
클래스 이름: io.undertow.server.handlers.PeerNameResolvingHandler
이름: resolve-peer-name
이 핸들러에는 매개 변수가 없습니다.
ProxyPeerAddressHandler
피어 주소를 X-Forwarded-For 헤더 값으로 설정하는 핸들러입니다. 항상 이 헤더를 설정하는 프록시 뒤에서만 사용해야 합니다. 그렇지 않으면 공격자가 피어 주소를 위조할 수 있습니다.
클래스 이름: io.undertow.server.handlers.ProxyPeerAddressHandler
이름: proxy-peer-address
이 핸들러에는 매개 변수가 없습니다.
RedirectHandler
302 리디렉션을 통해 지정된 위치로 리디렉션되는 리디렉션 핸들러. 위치는 교환 특성 문자열로 지정됩니다.
클래스 이름: io.undertow.server.handlers.RedirectHandler
이름: 리디렉션
표 A.11. 매개 변수
| 이름 | 설명 |
|---|---|
| value | 리디렉션 대상입니다. 기본 매개변수 입니다. |
RequestBufferingHandler
모든 요청 데이터를 버퍼링하는 핸들러.
클래스 이름: io.undertow.server.handlers.RequestBufferingHandler
이름: buffer-request
표 A.12. 매개 변수
| 이름 | 설명 |
|---|---|
| 버퍼 | 최대 버퍼 수를 정의하는 정수입니다. 기본 매개변수 입니다. |
RequestDumpingHandler
교환을 로그에 덤프하는 핸들러.
클래스 이름: io.undertow.server.handlers.RequestDumpingHandler
이름: dump-request
이 핸들러에는 매개 변수가 없습니다.
RequestLimitingHandler
최대 동시 요청 수를 제한하는 핸들러입니다. 제한 이외의 요청은 이전 요청이 완료될 때까지 차단됩니다.
클래스 이름: io.undertow.server.handlers.RequestLimitingHandler
이름: request-limit
표 A.13. 매개 변수
| 이름 | 설명 |
|---|---|
| requests | 최대 동시 요청 수를 나타내는 정수입니다. 기본 매개변수 이며 필수입니다. |
ResourceHandler
리소스를 제공하는 핸들러입니다.
클래스 이름: io.undertow.server.handlers.resource.ResourceHandler
이름: resource
표 A.14. 매개 변수
| 이름 | 설명 |
|---|---|
| 위치 | 리소스 위치. 기본 매개변수 이며 필수입니다. |
| allow-listing | 디렉토리 목록 허용 여부를 결정하는 부울 값입니다. |
ResponseRateLimitingHandler
다운로드 속도를 설정된 바이트/시간으로 제한하는 핸들러.
클래스 이름: io.undertow.server.handlers.ResponseRateLimitingHandler
이름: response-rate-limit
표 A.15. 매개 변수
| 이름 | 설명 |
|---|---|
| 바이트 | 다운로드 속도를 제한하는 바이트 수입니다. 이 매개 변수는 필수입니다. |
| time | 다운로드 속도를 제한하는 시간(초)입니다. 이 매개 변수는 필수입니다. |
SetHeaderHandler
고정 응답 헤더를 설정하는 핸들러입니다.
클래스 이름: io.undertow.server.handlers.SetHeaderHandler
이름: 헤더
표 A.16. 매개 변수
| 이름 | 설명 |
|---|---|
| 헤더 | 헤더 속성의 이름입니다. 이 매개 변수는 필수입니다. |
| value | 헤더 속성 값. 이 매개 변수는 필수입니다. |
SSLHeaderHandler
다음 헤더를 기반으로 연결에 대한 SSL 정보를 설정하는 핸들러입니다.
- SSL_CLIENT_CERT
- SSL_CIPHER
- SSL_SESSION_ID
이 핸들러가 체인에 있는 경우 이러한 헤더가 없는 경우에도 SSL 세션 정보를 항상 재정의합니다.
이 핸들러는 역방향 프록시 뒤에 있는 서버에서만 사용해야 합니다. 여기서 역방향 프록시는 모든 요청에 대해 이러한 헤더를 항상 설정하거나 SSL 정보가 없는 경우 이러한 이름으로 기존 헤더를 제거하도록 구성되어 있어야 합니다. 그렇지 않으면 악의적인 클라이언트가 SSL 연결을 스푸핑할 수 있습니다.
클래스 이름: io.undertow.server.handlers.SSLHeaderHandler
이름: ssl-headers
이 핸들러에는 매개 변수가 없습니다.
StuckThreadDetectionHandler
이 핸들러는 처리에 시간이 오래 걸리는 요청을 탐지하여 처리 중인 스레드가 정지되었음을 나타낼 수 있습니다.
클래스 이름: io.undertow.server.handlers.StuckThreadDetectionHandler
이름: stuck-thread-detector
표 A.17. 매개 변수
| 이름 | 설명 |
|---|---|
| Threshhold |
요청을 처리하는 데 걸리는 시간을 결정하는 정수 값(초)입니다. 기본값은 |
URLDecodingHandler
지정된 문자 집합에 URL 및 쿼리 매개 변수를 디코딩하는 핸들러입니다. 이 핸들러를 사용하는 경우 UndertowOptions.DECODE_URL 매개변수를 false 로 설정해야 합니다.
이 방법은 구문 분석기가 UTF-8 디코더에 빌드된 사용만큼 효율적이지 않습니다. UTF-8 이외의 것으로 디코딩해야 하는 경우가 아니면 구문 분석기를 대신 사용해야 합니다.
클래스 이름: io.undertow.server.handlers.URLDecodingHandler
이름: url-decoding
표 A.18. 매개 변수
| 이름 | 설명 |
|---|---|
| charactersset | 디코딩할 charactersset. 기본 매개변수 이므로 필수입니다. |