스프링 부트 #5.7. Auditing
5.7. Auditing
Spring Security가 실행되면 Spring Boot Actuator에는 이벤트를 게시하는 유연한 감사 프레임 워크가 있습니다 (기본적으로 "인증 성공", "실패"및 "액세스 거부"예외). 이 기능은 인증 실패를 기반으로 잠금 정책을보고하고 구현하는 데 매우 유용 할 수 있습니다.
AuditEventRepository
애플리케이션 구성 에 유형의 Bean을 제공하여 감사를 사용할 수 있습니다 . 편의를 위해 Spring Boot는 InMemoryAuditEventRepository
. InMemoryAuditEventRepository
기능이 제한되어 있으므로 개발 환경에서만 사용하는 것이 좋습니다. 프로덕션 환경의 경우 고유 한 대체 AuditEventRepository
구현을 작성하십시오 .
5.7.1. 사용자 정의 감사
게시 된 보안 이벤트를 사용자 정의하기 위해 AbstractAuthenticationAuditListener
및에 대한 자체 구현을 제공 할 수 있습니다 AbstractAuthorizationAuditListener
.
자체 비즈니스 이벤트에 감사 서비스를 사용할 수도 있습니다. 그렇게하기 위해, AuditEventRepository
당신의 bean을 당신의 컴포넌트에 주입하고 그것을 직접 사용하거나 AuditApplicationEvent
Spring과 함께 ApplicationEventPublisher
(를 구현하여 ApplicationEventPublisherAware
) 게시하십시오 .
5.8. HTTP 추적
HttpTraceRepository
애플리케이션 구성에 Bean 유형을 제공하여 HTTP 추적을 사용할 수 있습니다 . 편의상 Spring Boot는 InMemoryHttpTraceRepository
기본적으로 마지막 100 개의 요청-응답 교환에 대한 추적을 저장 하는 기능 을 제공합니다 . InMemoryHttpTraceRepository
다른 추적 솔루션에 비해 제한되어 있으므로 개발 환경에만 사용하는 것이 좋습니다. 프로덕션 환경의 경우 Zipkin 또는 Spring Cloud Sleuth와 같은 프로덕션 준비 추적 또는 관찰 가능 솔루션을 사용하는 것이 좋습니다. 또는 HttpTraceRepository
필요에 맞는 자신 을 만드십시오 .
httptrace
끝점에 기억되는 요청 - 응답 교환에 대한 정보를 얻을 수있다 HttpTraceRepository
.
5.8.1. 사용자 정의 HTTP 추적
각 추적에 포함 된 항목을 사용자 정의하려면 management.trace.http.include
구성 특성을 사용하십시오 . 고급 사용자 정의를 위해 자체 HttpExchangeTracer
구현을 등록하십시오 .
5.9. 공정 모니터링
에서 spring-boot
모듈, 당신은 종종 프로세스 모니터링에 유용 파일을 만들 수있는 두 개의 클래스를 찾을 수 있습니다 :
ApplicationPidFileWriter
응용 프로그램 PID를 포함하는 파일을 만듭니다 (기본적으로 파일 이름이 응용 프로그램 디렉토리에 있음application.pid
).WebServerPortFileWriter
실행중인 웹 서버의 포트를 포함하는 파일 (또는 파일 이름이 기본적으로 응용 프로그램 디렉토리에 있음application.port
)을 만듭니다.
기본적으로 이러한 작성자는 활성화되지 않지만 다음을 활성화 할 수 있습니다.
5.9.1. 구성 확장
에서 META-INF/spring.factories
파일, 다음 예제와 같이 PID 파일을 기록하는 수신기 (들)을 활성화 할 수 있습니다 :
org.springframework.context.ApplicationListener = \
org.springframework.boot.context.ApplicationPidFileWriter \
org.springframework.boot.web.context.WebServerPortFileWriter
5.9.2. 프로그래밍 방식으로
SpringApplication.addListeners(…)
메소드 를 호출 하고 적절한 Writer
객체를 전달하여 리스너를 활성화 할 수도 있습니다 . 이 방법을 사용하면 Writer
생성자 에서 파일 이름과 경로를 사용자 정의 할 수도 있습니다 .
5.10. 클라우드 파운드리 지원
Spring Boot의 액추에이터 모듈에는 호환 가능한 Cloud Foundry 인스턴스에 배포 할 때 활성화되는 추가 지원이 포함되어 있습니다. /cloudfoundryapplication
경로는 모든 대안 보안 경로를 제공 @Endpoint
콩.
확장 된 지원을 통해 Cloud Foundry 관리 UI (예 : 배포 된 애플리케이션을 보는 데 사용할 수있는 웹 애플리케이션)를 Spring Boot 액추에이터 정보로 보강 할 수 있습니다. 예를 들어, 응용 프로그램 상태 페이지에는 일반적인 "실행 중"또는 "중지 된"상태 대신 전체 상태 정보가 포함될 수 있습니다.
/cloudfoundryapplication 경로는 일반 사용자가 직접 액세스 할 수 없습니다. 엔드 포인트를 사용하려면 유효한 UAA 토큰을 요청과 함께 전달해야합니다. |
5.10.1. Extended Cloud Foundry Actuator 지원 비활성화
/cloudfoundryapplication
엔드 포인트 를 완전히 사용하지 않으 려면 application.properties
파일에 다음 설정을 추가 하십시오.
management.cloudfoundry.enabled=false
5.10.2. Cloud Foundry 자체 서명 인증서
/cloudfoundryapplication
엔드 포인트에 대한 보안 검증은 기본적 으로 다양한 Cloud Foundry 서비스에 대한 SSL 호출을 수행합니다. Cloud Foundry UAA 또는 Cloud Controller 서비스가 자체 서명 된 인증서를 사용하는 경우 다음 특성을 설정해야합니다.
management.cloudfoundry.skip-ssl-validation=true
5.10.3. 사용자 정의 컨텍스트 경로
서버의 컨텍스트 경로가 이외의 것으로 구성된 /
경우 애플리케이션의 루트에서 Cloud Foundry 엔드 포인트를 사용할 수 없습니다. 예를 들어 인 경우 server.servlet.context-path=/app
Cloud Foundry 엔드 포인트는에서 사용할 수 있습니다 /app/cloudfoundryapplication/*
.
/cloudfoundryapplication/*
서버의 컨텍스트 경로에 관계없이 Cloud Foundry 엔드 포인트를 항상 사용할 수 있으 려면 애플리케이션에서이를 명시 적으로 구성해야합니다. 구성은 사용중인 웹 서버에 따라 다릅니다. Tomcat의 경우 다음 구성을 추가 할 수 있습니다.
@Bean
public TomcatServletWebServerFactory servletWebServerFactory() {
return new TomcatServletWebServerFactory() {
@Override
protected void prepareContext(Host host, ServletContextInitializer[] initializers) {
super.prepareContext(host, initializers);
StandardContext child = new StandardContext();
child.addLifecycleListener(new Tomcat.FixContextListener());
child.setPath("/cloudfoundryapplication");
ServletContainerInitializer initializer = getServletContextInitializer(getContextPath());
child.addServletContainerInitializer(initializer, Collections.emptySet());
child.setCrossContext(true);
host.addChild(child);
}
};
}
private ServletContainerInitializer getServletContextInitializer(String contextPath) {
return (c, context) -> {
Servlet servlet = new GenericServlet() {
@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
ServletContext context = req.getServletContext().getContext(contextPath);
context.getRequestDispatcher("/cloudfoundryapplication").forward(req, res);
}
};
context.addServlet("cloudfoundry", servlet).addMapping("/*");
};
}
5.11. 다음 읽을 거리
Graphite 와 같은 그래프 도구에 대해 읽을 수 있습니다 .
그렇지 않으면 계속해서 '배포 옵션' 에 대해 읽 거나 Spring Boot의 빌드 도구 플러그인에 대한 자세한 정보를 얻을 수 있습니다 .
Spring Boot Reference DocumentationPhillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons, Vedran Pavić, Jay Bryant, Madhura Bhave, Eddú Meléndez, Scott FrederickLegal2.3.1.RELEASE Copyright © 2012-2020 Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically. |