Inicio rápido de Connector Operations
Esta página proporciona detalles sobre cómo comenzar con la API de connector operations.
Interfaz OperableConnector
Antes de comenzar, asegúrese de que los connectors que desea operar implementen la interfaz OperableConnector.
Sin esto, la API no puede realizar operaciones sobre ellos.
public interface OperableConnector {
/**
* Retrieve name of the connector.
*/
String getName();
/**
* Starts the connector.
*/
void start();
/**
* Starts the connector's health check procedure.
*/
void startHealthCheck();
ConnectorHealth getHealth();
/**
* Shuts down the connector.
*
* @param reason the reason for shutdown
*/
CompletionStage<Void> shutdown(ShutdownReason reason);
/**
* Returns the connector's running status
*/
boolean isRunning();
/**
* Returns the connector's configuration.
*/
ConnectorConfig getConfig();
/**
* Returns all the connector's transports.
*/
List<? extends OperableConnectorTransport> getTransports();
/**
* Abstraction of a connector's configuration.
*/
interface ConnectorConfig {
String getConfigRoot();
}
}
Primeros pasos
Para registrar el controlador, simplemente incluya la siguiente dependencia de Maven. La auto-configuración de Spring hará el resto
(Nota: para aplicaciones construidas por clientes, la versión vendrá del BOM para la versión que esté usando).
<dependency>
<groupId>com.iconsolutions.ipf.core.connector</groupId>
<artifactId>connector-operations-api</artifactId>
</dependency>
Auditoría
Esta sección explica cómo configurar el audit logging en los endpoints del operador de connector.
Prerrequisitos
Auditar solicitudes a la API de connector operations supone que el contexto de seguridad de Spring ha sido configurado y que solo usuarios autenticados pueden hacer solicitudes a recursos protegidos. Sin un usuario autenticado es difícil auditar quién hizo la solicitud.
Configuración Web Reactiva
La auditoría se implementa con la pila web reactiva del framework Spring.
Se puede agregar una etapa de filtro de auditoría como parte del manejo de solicitudes implementando la interfaz WebFilter y anotándola con @Component.
Un ejemplo de esto se muestra a continuación.
@Slf4j
@Component
public class AuditLogFilter implements WebFilter {
private final ServerWebExchangeMatcher matcher;
public AuditLogFilter() {
webExchangeMatcher = ServerWebExchangeMatchers.pathMatchers("/connectors/**"); (1)
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
return webExchangeMatcher.matches(exchange)
.filter(ServerWebExchangeMatcher.MatchResult::isMatch)
.flatMap(m -> exchange.getPrincipal()
.doOnNext(principal -> logPrincipal(request, principal))) (2)
.then(chain.filter(exchange));
}
private void logPrincipal(ServerHttpRequest request, Principal principal) { (3)
log.info("{} {} principal.name: {}",
request.getMethod(),
request.getPath(),
principal.getName());
}
}
| 1 | El filtro de intercambio web nos permite registrar solo en endpoints específicos. |
| 2 | El principal solo se registrará si está establecido en el exchange; de lo contrario no sucederá nada. |
| 3 | El logging puede personalizarse; en este ejemplo registra el método y la ruta de la solicitud junto con el nombre del principal. |
Configuración Web Bloqueante
Los servidores web tradicionales bloqueantes deben configurarse de manera diferente. Afortunadamente, esto también es bastante simple ya que Spring ha implementado un Filter que puede usarse para registrar solicitudes. Esto también puede configurarse para que solo funcione en endpoints específicos si es necesario.
El siguiente fragmento de código muestra cómo puede configurarse registrando un par de beans en una clase de configuración.
@Configuration
public class AuditLogConfig {
@Bean
public FilterRegistrationBean<AbstractRequestLoggingFilter> (1)
loggingFilterRegistration(AbstractRequestLoggingFilter requestLoggingFilter) {
var registration = new FilterRegistrationBean<>(requestLoggingFilter);
registration.addUrlPatterns("/connectors/*");
return registration;
}
@Bean
public AbstractRequestLoggingFilter requestLoggingFilter() { (2)
CommonsRequestLoggingFilter loggingFilter = new CommonsRequestLoggingFilter();
loggingFilter.setIncludeClientInfo(true);
loggingFilter.setIncludeQueryString(true);
loggingFilter.setIncludePayload(true);
loggingFilter.setMaxPayloadLength(64000);
return loggingFilter;
}
}
| 1 | El bean de registro del filtro puede configurarse para registrar solo solicitudes que coincidan con los patrones de URL proporcionados. |
| 2 | Aquí se configura el filtro de logging.
Podría usarse una implementación personalizada de AbstractRequestLoggingFilter si se requiere más control sobre el comportamiento. |