ServiceCallInterceptor security = new ServiceCallInterceptor() {
@Override public void onInvoke(ServiceInterceptorContext ctx) throws ServiceInterceptException {
// Check permission before execution of the method.
if (!CustomSecurityProvider.get().access(ctx.method(), ctx.attribute("sessionId")))
throw new SecurityException("Method invocation is not permitted");
}
}
ServiceCallInterceptor audit = new ServiceCallInterceptor() {
@Override public void onInvoke(ServiceInterceptorContext ctx) {
// Record an event before execution of the method.
AuditProvider.get().recordStartEvent(ctx.method(), ctx.attribute("sessionId"));
}
@Override public void onComplete(@Nullable Object res, ServiceInterceptorContext ctx) {
AuditProvider.get().recordFinishEvent(ctx.method(), ctx.attribute("sessionId"));
}
@Override public void onError(Throwable err, ServiceInterceptorContext ctx) {
AuditProvider.get().recordError(ctx.method(), ctx.attribute("sessionId"), err.getMessage());
}
}
// Set context parameters for service proxy.
ServiceCallContext ctx = ServiceCallContext.builder().put("sessionId", sessionId).build();
ServiceConfiguration svcCfg = new ServiceConfiguration()
.setName("service")
.setService(new MyServiceImpl())
.setMaxPerNodeCount(1)
.setInterceptors(security, audit);
// Deploy service.
ignite.services().deploy(svcCfg);
MyService proxy = ignite.services().serviceProxy("service", MyService.class, false, ctx, 0);
// A business method call to be intercepted.
proxy.placeOrder(order1);
proxy.placeOrder(order2); |