보안, 오류, 경고, 로깅 처리

이 섹션에서는 다음 내용에 대해 설명합니다.

보안

데이터 소스는 다음과 같이 두 가지 액세스 모드 중 하나로 작동할 수 있습니다.

  • 기본값인 제한 액세스 모드에서 데이터 소스는 데이터 소스가 있는 도메인과 동일한 도메인에서 발생하는 요청만 처리합니다. 제한 모드는 교차 사이트 요청 위조(XSRF) 공격을 막아 무제한 액세스 모드보다 안전합니다. 데이터 소스 라이브러리는 서버 측의 상태나 데이터를 변경하는 것이 아니라 데이터를 반환하는 인터페이스만 제공하므로 데이터를 도용하려는 XSRF 공격만 가능합니다. 데이터 소스를 데이터 도용 시도로부터 안전하게 보호하려면 제한 기반 모드를 쿠키 기반 인증과 함께 사용해야 합니다. 사용자를 인증하는 방법은 환경과 구현에 따라 다릅니다.

  • 무제한 액세스 모드에서는 데이터 소스가 출처와 상관없이 모든 요청을 처리합니다. 제한 모드에서 실행되는 데이터 소스는 쿠키 기반 인증으로 보호할 수 있지만 데이터 소스는 XSRF 공격에 취약합니다. 데이터 소스 도메인 외부의 웹페이지에 있는 시각화가 데이터 소스에 액세스해야 하거나 데이터가 공개 도메인에 있으므로 이를 보호할 필요가 없는 경우 무제한 모드를 사용하세요.

시각화 요청은 JSON, CSV 또는 HTML의 응답 형식을 지정할 수 있습니다. 응답 형식은 데이터 소스가 데이터 테이블을 반환하는 형식을 결정합니다. CSV 및 HTML 형식은 XSRF 공격에 취약하지 않으므로 제한 모드에서도 다른 도메인에서 액세스할 수 있습니다.

무제한 모드를 지정하려면 다음과 같이 isRestrictedAccessMode()를 재정의합니다.

  @Override
  protected boolean isRestrictedAccessMode() {
    return false;
  }

편의를 위해 라이브러리와 함께 제공되는 모든 예는 무제한 액세스 모드에서 실행됩니다.

오류 및 경고

유효한 데이터 테이블을 반환하는 것이 불가능하거나 바람직하지 않은 경우라이브러리에서 DataSourceException이 발생합니다. 예를 들어 사용자를 인증할 수 없는 경우입니다. 오류로 인해 데이터 테이블을 만들지 못하는 경우 라이브러리에서 이러한 예외가 발생합니다. 데이터 소스에 고유한 상황에서 예외를 발생시킬 수 있습니다. 그렇다면 DataSourceException 클래스에서 상속받아 자체 오류 예외 유형을 만듭니다. DataSourceException 클래스를 직접 발생시킬 수도 있습니다.

DataSourceException 클래스는 base 패키지에 있으며 다음 매개변수를 사용합니다.

  • ReasonType
    이 매개변수는 필수입니다. 사용 가능한 이유 유형은 ReasonType enum에 정의되어 있습니다. 사용 가능한 이유 유형이 적합하지 않으면 Other 또는 Internal를 사용할 수 있습니다.
     
  • MessageToUser
    이 매개변수는 오류 메시지의 텍스트를 정의합니다. 대부분의 경우 도움말로 사용자에게 표시되므로 기술 정보나 기밀 정보를 포함하지 않는 것이 중요합니다.

datasource.DataSourceHelper의 도우미 함수 세트를 사용하여 오류를 처리할 수 있습니다. 이 경우 동일한 이름의 setErrorServletResponse 함수 두 개를 호출하여 DataSourceException를 취하고 데이터 서블릿 응답에 오류를 설정합니다. 이러한 함수 중 하나는 데이터 소스 요청을 사용하고, 다른 함수는 HttpServlet request를 사용하며, DataSourceRequest을 만들지 못한 경우에 사용됩니다. 구현 예는 기능 및 이벤트 흐름 정의에 나와 있습니다.

데이터 테이블을 반환할 수 없는 경우 라이브러리에서 오류를 반환합니다. 데이터 테이블을 반환할 수 있지만 보고할 문제가 있는 경우 라이브러리는 데이터 테이블과 함께 경고를 반환합니다. 예를 들어 라이브러리는 다음과 같은 상황에서 경고를 생성합니다.

  • 쿼리 시각화에서 LIMIT을 제공하여 데이터가 잘리는 경우.
  • 쿼리 시각화가 FORMAT 절에서 잘못된 형식 지정 패턴을 요청하는 경우.

자체 경고를 추가하려면 base.Warning 인스턴스를 만들고 addWarning() 메서드를 사용하여 데이터 테이블에 추가합니다.

기록

라이브러리는 Jakarta Commons 로깅을 사용합니다. 자카르타 커먼스 로깅은 이미 보유하고 있는 가장 일반적인 로깅 시스템과 함께 사용할 수 있습니다. 로깅 시스템이 표준이 아닌 경우 어댑터를 작성해야 할 수 있습니다. 자세한 내용은 자카르타 커먼스 로깅 홈페이지를 참고하세요.

예외가 발생하면 정보가 로그로 전송됩니다. 로그에 액세스하는 방법은 사용하는 로깅 시스템에 따라 다릅니다.