use of com.haulmont.cuba.core.app.ServerConfig in project cuba by cuba-platform.
the class CubaRemoteInvocationExecutor method invoke.
@Override
public Object invoke(RemoteInvocation invocation, Object targetObject) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
if (invocation instanceof CubaRemoteInvocation) {
CubaRemoteInvocation cubaInvocation = (CubaRemoteInvocation) invocation;
UUID sessionId = cubaInvocation.getSessionId();
if (sessionId != null) {
UserSession session = userSessions.getAndRefresh(sessionId);
if (session == null) {
ServerConfig serverConfig = configuration.getConfig(ServerConfig.class);
String sessionProviderUrl = serverConfig.getUserSessionProviderUrl();
if (StringUtils.isNotBlank(sessionProviderUrl)) {
log.debug("User session {} not found, trying to get it from {}", sessionId, sessionProviderUrl);
try {
HttpServiceProxy proxyFactory = new HttpServiceProxy(getServerSelector(sessionProviderUrl));
proxyFactory.setServiceUrl("cuba_TrustedClientService");
proxyFactory.setServiceInterface(TrustedClientService.class);
proxyFactory.afterPropertiesSet();
TrustedClientService trustedClientService = (TrustedClientService) proxyFactory.getObject();
if (trustedClientService != null) {
UserSession userSession = trustedClientService.findSession(serverConfig.getTrustedClientPassword(), sessionId);
if (userSession != null) {
userSessions.add(userSession);
} else {
log.debug("User session {} not found on {}", sessionId, sessionProviderUrl);
}
}
} catch (Exception e) {
log.error("Error getting user session from {}", sessionProviderUrl, e);
}
}
}
AppContext.setSecurityContext(new SecurityContext(sessionId));
}
if (cubaInvocation.getLocale() != null) {
Locale requestLocale = Locale.forLanguageTag(cubaInvocation.getLocale());
if (!globalConfig.getAvailableLocales().containsValue(requestLocale)) {
requestLocale = null;
}
UserInvocationContext.setRequestScopeInfo(sessionId, requestLocale, cubaInvocation.getTimeZone(), cubaInvocation.getAddress(), cubaInvocation.getClientInfo());
}
}
Object result;
try {
result = invocation.invoke(targetObject);
} finally {
AppContext.setSecurityContext(null);
UserInvocationContext.clearRequestScopeInfo();
}
return result;
}
Aggregations