Search in sources :

Example 1 with ServerConfig

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;
}
Also used : Locale(java.util.Locale) ServerConfig(com.haulmont.cuba.core.app.ServerConfig) TrustedClientService(com.haulmont.cuba.security.app.TrustedClientService) UserSession(com.haulmont.cuba.security.global.UserSession) SecurityContext(com.haulmont.cuba.core.sys.SecurityContext) UUID(java.util.UUID) InvocationTargetException(java.lang.reflect.InvocationTargetException)

Aggregations

ServerConfig (com.haulmont.cuba.core.app.ServerConfig)1 SecurityContext (com.haulmont.cuba.core.sys.SecurityContext)1 TrustedClientService (com.haulmont.cuba.security.app.TrustedClientService)1 UserSession (com.haulmont.cuba.security.global.UserSession)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 Locale (java.util.Locale)1 UUID (java.util.UUID)1