use of org.apache.ignite.IgniteAuthenticationException in project ignite by apache.
the class GridRestProcessor method handleRequest.
/**
* @param req Request.
* @return Future.
*/
private IgniteInternalFuture<GridRestResponse> handleRequest(final GridRestRequest req) {
if (startLatch.getCount() > 0) {
try {
startLatch.await();
} catch (InterruptedException e) {
return new GridFinishedFuture<>(new IgniteCheckedException("Failed to handle request " + "(protocol handler was interrupted when awaiting grid start).", e));
}
}
if (log.isDebugEnabled())
log.debug("Received request from client: " + req);
boolean authenticationEnabled = ctx.authentication().enabled();
boolean securityEnabled = ctx.security().enabled();
if (authenticationEnabled || securityEnabled) {
Session ses;
try {
ses = session(req);
} catch (IgniteCheckedException e) {
GridRestResponse res = new GridRestResponse(STATUS_FAILED, e.getMessage());
return new GridFinishedFuture<>(res);
}
assert ses != null;
req.clientId(ses.clientId);
req.sessionToken(U.uuidToBytes(ses.sesId));
if (log.isDebugEnabled())
log.debug("Next clientId and sessionToken were extracted according to request: " + "[clientId=" + req.clientId() + ", sesTok=" + Arrays.toString(req.sessionToken()) + "]");
if (securityEnabled) {
SecurityContext secCtx0 = ses.secCtx;
try {
if (secCtx0 == null)
ses.secCtx = secCtx0 = authenticate(req);
authorize(req, secCtx0);
} catch (SecurityException e) {
assert secCtx0 != null;
return new GridFinishedFuture<>(new GridRestResponse(STATUS_SECURITY_CHECK_FAILED, e.getMessage()));
} catch (IgniteCheckedException e) {
return new GridFinishedFuture<>(new GridRestResponse(STATUS_AUTH_FAILED, e.getMessage()));
}
} else {
AuthorizationContext authCtx0 = ses.authCtx;
try {
if (authCtx0 == null) {
SecurityCredentials creds = credentials(req);
String login = null;
if (creds.getLogin() instanceof String)
login = (String) creds.getLogin();
String pwd = null;
if (creds.getPassword() instanceof String)
pwd = (String) creds.getPassword();
if (F.isEmpty(login) || F.isEmpty(pwd))
throw new IgniteAuthenticationException("The user name or password is incorrect");
ses.authCtx = ctx.authentication().authenticate(login, pwd);
req.authorizationContext(ses.authCtx);
}
} catch (IgniteCheckedException e) {
return new GridFinishedFuture<>(new GridRestResponse(STATUS_AUTH_FAILED, e.getMessage()));
}
}
}
interceptRequest(req);
GridRestCommandHandler hnd = handlers.get(req.command());
IgniteInternalFuture<GridRestResponse> res = hnd == null ? null : hnd.handleAsync(req);
if (res == null)
return new GridFinishedFuture<>(new IgniteCheckedException("Failed to find registered handler for command: " + req.command()));
return res.chain(new C1<IgniteInternalFuture<GridRestResponse>, GridRestResponse>() {
@Override
public GridRestResponse apply(IgniteInternalFuture<GridRestResponse> f) {
GridRestResponse res;
boolean failed = false;
try {
res = f.get();
} catch (Exception e) {
failed = true;
if (!X.hasCause(e, VisorClusterGroupEmptyException.class))
LT.error(log, e, "Failed to handle request: " + req.command());
if (log.isDebugEnabled())
log.debug("Failed to handle request [req=" + req + ", e=" + e + "]");
// Prepare error message:
SB sb = new SB(256);
sb.a("Failed to handle request: [req=").a(req.command());
if (req instanceof GridRestTaskRequest) {
GridRestTaskRequest tskReq = (GridRestTaskRequest) req;
sb.a(", taskName=").a(tskReq.taskName()).a(", params=").a(tskReq.params());
}
sb.a(", err=").a(e.getMessage() != null ? e.getMessage() : e.getClass().getName()).a(']');
res = new GridRestResponse(STATUS_FAILED, sb.toString());
}
assert res != null;
if (ctx.security().enabled() && !failed)
res.sessionTokenBytes(req.sessionToken());
interceptResponse(res, req);
return res;
}
});
}
Aggregations