Giter Site home page Giter Site logo

containerproxy's Introduction

       ____            _        _                 ____
      / ___|___  _ __ | |_ __ _(_)_ __   ___ _ __|  _ \ _ __ _____  ___   _
     | |   / _ \| '_ \| __/ _` | | '_ \ / _ \ '__| |_) | '__/ _ \ \/ / | | |
     | |__| (_) | | | | || (_| | | | | |  __/ |  |  __/| | | (_) >  <| |_| |
      \____\___/|_| |_|\__\__,_|_|_| |_|\___|_|  |_|   |_|  \___/_/\_\\__, |
                                                                       |___/

Build Status

ContainerProxy

ContainerProxy is an application that launches and manages containers for users, to perform specific tasks.

It is the engine that powers a.o. ShinyProxy but can be used for any application that needs to manage HTTP proxy routes into Docker containers.

Learn more at https://containerproxy.io (in progress)

(c) Copyright Open Analytics NV, 2017-2023 - Apache License 2.0

Building from source

Clone this repository and run

mvn -U clean install -DskipTests

The build will result in a single .jar file that is made available in the target directory.

Further information

https://containerproxy.io (in progress)

containerproxy's People

Contributors

bosscolo avatar fmannhardt avatar fmichielssen avatar jhhhnikt avatar johannestang avatar ledfan avatar nury-garryyev avatar rcohendbrs avatar robekoc-aws avatar shrektan avatar tverbeke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

containerproxy's Issues

container-volumes is not mounting to correct mount path

I have created following PersistentVolume and PersistentVolumeClaim definitions for our Shiny-proxy Kubernetes test environment and noticed that it's mounting to incorrect path instead of given NFS server path.

Any ideas on how to debug this issue?

PV

apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
labels:
name: nfs-pv
spec:
persistentVolumeReclaimPolicy: Retain
storageClassName: manual
capacity:
storage: 500Mi
accessModes:
- ReadWriteMany
nfs:
server: nfs_host.com
path: /test
readOnly: false

PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
namespace: sproxy
spec:
storageClassName: manual
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200Mi

Then referred to above PVC as below in application.yaml for one of the applications.
container-volumes: ["nfs-pvc:/sproxy/data"]

The file system is shown as /dev/mapper/rootvg-homelv, instead of nfs_host.com:/test server and the path.

Support Kubernetes Pods Service Accounts

In the application configuration for Kubernetes backend users it would be useful to be able to assign a service account to the application pods. Something like this:

specs:
      - id: my_example_app
        display-name: My Example App
        description: Super cool example
        container-image: 5555555555.dkr.ecr.us-beast-1.amazonaws.com/my-repo/image:3
        service-account: svc-forecast-dashboard

This would allow AWS EKS users to use Kubernetes service account to IAM role bindings to enable connectivity to Hive, Aurora, or any other platform dependencies.

Q: What would be required to consume special access token claim in role-claim or access expression?

We have a customer that is considering an OIDC Provider that have a custom claim consisting of a list of json objects. The custom claim lives in the access token. The immediate solution we think will work is to let the applications themself read the SHINYPROXY_OIDC_ACCESS_TOKEN environment variable and manage how to act on the custom claim. The drawback is that all applications will be available on the landing page in ShinyProxy since the only data that indicate what applications an authenticated user have access to exists in the access token in the form of json objects. We'll need to trust the applications to manage access to data instead letting ShinyProxy control access, which can be both good and bad in this case.

Do you have suggestions on how to:

  1. Access the information in an access token and use it for role-claim or access expression to limit the available applications on the landing page.
  2. Parse the list in the custom claim in an another way than full string match, for instance using json or regex.

I recon a native solution might require introduction of a new authentication object, as far as I can tell oidcUser is based off DefaultOidcUser. And we're a bit unsure if clients should read access tokens in the first place.

Support For When Single Role is a String from OIDC Token

We are using an OIDC authentication provider that is a non-array string with a single role.

Is this something that the project would be open have as a change?

Happy to submit a PR that will modify the following:

  1. The function below

    public static List<String> parseRolesClaim(Logger log, String rolesClaimName, Object claimValue) {
    if (claimValue == null) {
    log.debug(String.format("No roles claim with name %s found", rolesClaimName));
    return new ArrayList<>();
    } else {
    log.debug(String.format("Matching claim found: %s -> %s (%s)", rolesClaimName, claimValue, claimValue.getClass()));
    }
    if (claimValue instanceof Collection) {
    List<String> result = new ArrayList<>();
    for (Object object : ((Collection<?>) claimValue)) {
    if (object != null) {
    result.add(object.toString());
    }
    }
    log.debug(String.format("Parsed roles claim as Java Collection: %s -> %s (%s)", rolesClaimName, result, result.getClass()));
    return result;
    }
    if (claimValue instanceof String) {
    List<String> result = new ArrayList<>();
    try {
    Object value = new JSONParser(JSONParser.MODE_PERMISSIVE).parse((String) claimValue);
    if (value instanceof List) {
    List<?> valueList = (List<?>) value;
    valueList.forEach(o -> result.add(o.toString()));
    }
    } catch (ParseException e) {
    // Unable to parse JSON
    log.debug(String.format("Unable to parse claim as JSON: %s -> %s (%s)", rolesClaimName, claimValue, claimValue.getClass()));
    }
    log.debug(String.format("Parsed roles claim as JSON: %s -> %s (%s)", rolesClaimName, result, result.getClass()));
    return result;
    }
    log.debug(String.format("No parser found for roles claim (unsupported type): %s -> %s (%s)", rolesClaimName, claimValue, claimValue.getClass()));
    return new ArrayList<>();
    }

  2. The tests below
    https://github.com/openanalytics/containerproxy/blob/5f0fa2d98d0e0014a1190f85755634a4845ee834/src/test/java/eu/openanalytics/containerproxy/test/unit/TestOpenIdParseClaimRoles.java

V0.8.5 doesn't build

I'm trying to build the newly released v0.8.5 by doing a simple mvn -U clean install, as suggested. This is the result:

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for eu.openanalytics:containerproxy:jar:0.8.5
[WARNING] 'dependencies.dependency.scope' for org.arquillian.cube:arquillian-cube-bom:pom must be one of [provided, compile, runtime, test, system] but is 'import'. @ line 284, column 20
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building ContainerProxy 0.8.5
[INFO] ------------------------------------------------------------------------
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/3.1.0/maven-clean-plugin-3.1.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/3.1.0/maven-clean-plugin-3.1.0.pom (5.2 kB at 9.5 kB/s)
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ containerproxy ---
[INFO] Deleting /Users/thinkitconsulting/development/git/__old_containerproxy/target
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.3.3.RELEASE:build-info (build-info) @ containerproxy ---
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ containerproxy ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 4 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ containerproxy ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 83 source files to /Users/thinkitconsulting/development/git/__old_containerproxy/target/classes
[INFO] /Users/thinkitconsulting/development/git/__old_containerproxy/src/main/java/eu/openanalytics/containerproxy/security/APISecurityConfig.java: Some input files use or override a deprecated API.
[INFO] /Users/thinkitconsulting/development/git/__old_containerproxy/src/main/java/eu/openanalytics/containerproxy/security/APISecurityConfig.java: Recompile with -Xlint:deprecation for details.
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ containerproxy ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 5 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ containerproxy ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 7 source files to /Users/thinkitconsulting/development/git/__old_containerproxy/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ containerproxy ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
16:30:42.707 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:42.712 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:42.727 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:42.778 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:42.801 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService], using SpringBootContextLoader
16:30:42.807 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestProxyService-context.xml] does not exist
16:30:42.809 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestProxyServiceContext.groovy] does not exist
16:30:42.809 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.205 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: using defaults.
16:30:43.205 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.310 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@4ae9cfc1, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@512baff6, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@632ceb35, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@1c93f6e1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@1800a575, org.springframework.test.context.transaction.TransactionalTestExecutionListener@1458ed9c, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@10a9d961, org.springframework.test.context.event.EventPublishingTestExecutionListener@130e116b, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@e383572, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@5ddf0d24, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@363a52f, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@60856961, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@2fd953a6, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@a4add54, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@141e5bef, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@5f9be66c]
16:30:43.312 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.317 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.328 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.331 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.351 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.351 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.454 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.464 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.465 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.467 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.470 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers], using SpringBootContextLoader
16:30:43.472 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestConcurrentUsers-context.xml] does not exist
16:30:43.473 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestConcurrentUsersContext.groovy] does not exist
16:30:43.474 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.509 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: using defaults.
16:30:43.510 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.510 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@74c79fa2, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@1e0f9063, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@53bd8fca, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@7642df8f, org.springframework.test.context.support.DirtiesContextTestExecutionListener@3e30646a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@5cde6747, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@63a270c9, org.springframework.test.context.event.EventPublishingTestExecutionListener@37c7595, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@3ed242a4, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@1199fe66, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@614df0a4, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@1fdf1c5, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@2d96543c, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@73a2e526, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@7d64e326, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@13f95696]
16:30:43.510 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.510 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.511 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.511 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.511 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.511 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.526 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.527 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.527 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.531 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.532 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest], using SpringBootContextLoader
16:30:43.533 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/NoAuthenticationTest-context.xml] does not exist
16:30:43.534 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/NoAuthenticationTestContext.groovy] does not exist
16:30:43.534 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.535 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: NoAuthenticationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
16:30:43.608 [main] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [/Users/thinkitconsulting/development/git/__old_containerproxy/target/classes/eu/openanalytics/containerproxy/ContainerProxyApplication.class]
16:30:43.609 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration eu.openanalytics.containerproxy.ContainerProxyApplication for test class eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest
16:30:43.611 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: using defaults.
16:30:43.611 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.612 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@54a67a45, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7d42c224, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@56aaaecd, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@522a32b1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@35390ee3, org.springframework.test.context.transaction.TransactionalTestExecutionListener@5e01a982, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@5ddea849, org.springframework.test.context.event.EventPublishingTestExecutionListener@5ee2b6f9, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@23d1e5d0, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@704f1591, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@58fb7731, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@13e547a9, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@3fb6cf60, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@37ddb69a, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@349c1daf, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@dfddc9a]
16:30:43.612 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.612 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.613 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.613 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.613 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.613 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.618 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.618 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.618 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.619 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.620 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest], using SpringBootContextLoader
16:30:43.621 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/SimpleAuthenticationTest-context.xml] does not exist
16:30:43.623 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/SimpleAuthenticationTestContext.groovy] does not exist
16:30:43.623 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.623 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: SimpleAuthenticationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
16:30:43.629 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration eu.openanalytics.containerproxy.ContainerProxyApplication for test class eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest
16:30:43.631 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: using defaults.
16:30:43.631 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.631 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@3a1dd365, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@395b56bb, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@256f8274, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@68044f4, org.springframework.test.context.support.DirtiesContextTestExecutionListener@52d239ba, org.springframework.test.context.transaction.TransactionalTestExecutionListener@315f43d5, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@68fa0ba8, org.springframework.test.context.event.EventPublishingTestExecutionListener@6c5945a7, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@2f05be7f, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@640f11a1, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@5c10f1c3, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@7ac2e39b, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@78365cfa, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@64a8c844, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@3f6db3fb, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@52de51b6]
16:30:43.632 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.632 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.632 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.632 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.632 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.632 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.636 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.636 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.636 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.637 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.638 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest], using SpringBootContextLoader
16:30:43.639 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/LDAPAuthenticationTest-context.xml] does not exist
16:30:43.640 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/LDAPAuthenticationTestContext.groovy] does not exist
16:30:43.640 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.640 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: LDAPAuthenticationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
16:30:43.644 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration eu.openanalytics.containerproxy.ContainerProxyApplication for test class eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest
16:30:43.645 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: using defaults.
16:30:43.645 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.646 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@17cdf2d0, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@1755e85b, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@736d6a5c, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@2371aaca, org.springframework.test.context.support.DirtiesContextTestExecutionListener@5b529706, org.springframework.test.context.transaction.TransactionalTestExecutionListener@63fdab07, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@7b5a12ae, org.springframework.test.context.event.EventPublishingTestExecutionListener@5553d0f5, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@1af687fe, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@14dda234, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@3f390d63, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@74a6a609, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@5a411614, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@2374d36a, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@54d18072, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@1506f20f]
16:30:43.646 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.646 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.646 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.646 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.647 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.647 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.653 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.653 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.653 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.654 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.654 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService], using SpringBootContextLoader
16:30:43.655 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestProxyService-context.xml] does not exist
16:30:43.656 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestProxyServiceContext.groovy] does not exist
16:30:43.656 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.659 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]: using defaults.
16:30:43.659 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.660 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@19553973, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7bb6ab3a, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7fe7c640, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@4c4748bf, org.springframework.test.context.support.DirtiesContextTestExecutionListener@7ce97ee5, org.springframework.test.context.transaction.TransactionalTestExecutionListener@32c8e539, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@73dce0e6, org.springframework.test.context.event.EventPublishingTestExecutionListener@5a85c92, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@32811494, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@4795ded0, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@53dacd14, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@14d14731, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@2eced48b, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@47c4ecdc, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@42f33b5d, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@5c8504fd]
16:30:43.660 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.660 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.660 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.661 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.661 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.661 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.664 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.665 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.665 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.665 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.666 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers], using SpringBootContextLoader
16:30:43.666 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestConcurrentUsers-context.xml] does not exist
16:30:43.667 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: class path resource [eu/openanalytics/containerproxy/test/proxy/TestConcurrentUsersContext.groovy] does not exist
16:30:43.667 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.669 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]: using defaults.
16:30:43.669 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.670 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@25bc0606, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5d1659ea, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@793138bd, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@1951b871, org.springframework.test.context.support.DirtiesContextTestExecutionListener@5c18016b, org.springframework.test.context.transaction.TransactionalTestExecutionListener@33aeca0b, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@43aaf813, org.springframework.test.context.event.EventPublishingTestExecutionListener@57ac5227, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@4ba302e0, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@e98770d, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@1ae67cad, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@2f6e28bc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@7c098bb3, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@31e4bb20, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@18cebaa5, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@463b4ac8]
16:30:43.670 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.670 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.670 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.670 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.671 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.671 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers]
16:30:43.672 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.672 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.672 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.673 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.673 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest], using SpringBootContextLoader
16:30:43.675 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/NoAuthenticationTest-context.xml] does not exist
16:30:43.676 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/NoAuthenticationTestContext.groovy] does not exist
16:30:43.676 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.676 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: NoAuthenticationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
16:30:43.681 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration eu.openanalytics.containerproxy.ContainerProxyApplication for test class eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest
16:30:43.683 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]: using defaults.
16:30:43.683 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.684 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@5c153b9e, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@2a7686a7, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@758a34ce, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@7ec3394b, org.springframework.test.context.support.DirtiesContextTestExecutionListener@bff34c6, org.springframework.test.context.transaction.TransactionalTestExecutionListener@1522d8a0, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@312ab28e, org.springframework.test.context.event.EventPublishingTestExecutionListener@5644dc81, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@246f8b8b, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@278bb07e, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@4351c8c3, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@3381b4fc, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@6bea52d4, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@11981797, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@5c42d2b7, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@625abb97]
16:30:43.684 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.684 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.684 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.684 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.684 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.684 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest]
16:30:43.685 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.686 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.686 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.686 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.687 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest], using SpringBootContextLoader
16:30:43.687 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/SimpleAuthenticationTest-context.xml] does not exist
16:30:43.688 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/SimpleAuthenticationTestContext.groovy] does not exist
16:30:43.688 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.688 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: SimpleAuthenticationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
16:30:43.692 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration eu.openanalytics.containerproxy.ContainerProxyApplication for test class eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest
16:30:43.693 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]: using defaults.
16:30:43.693 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.693 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@55342f40, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@a4ca3f6, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@72ea6193, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@31aa3ca5, org.springframework.test.context.support.DirtiesContextTestExecutionListener@45905bff, org.springframework.test.context.transaction.TransactionalTestExecutionListener@2a2c13a8, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@b6b1987, org.springframework.test.context.event.EventPublishingTestExecutionListener@6b44435b, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@2ccca26f, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@66b7550d, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@3543df7d, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@7c541c15, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@3542162a, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@698122b2, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@4212a0c8, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@1e7aa82b]
16:30:43.693 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.693 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.694 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.694 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.694 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.694 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest]
16:30:43.695 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.695 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
16:30:43.695 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
16:30:43.695 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
16:30:43.696 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest], using SpringBootContextLoader
16:30:43.697 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/LDAPAuthenticationTest-context.xml] does not exist
16:30:43.697 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: class path resource [eu/openanalytics/containerproxy/test/auth/LDAPAuthenticationTestContext.groovy] does not exist
16:30:43.697 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: no resource found for suffixes {-context.xml, Context.groovy}.
16:30:43.697 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: LDAPAuthenticationTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
16:30:43.701 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration eu.openanalytics.containerproxy.ContainerProxyApplication for test class eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest
16:30:43.702 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]: using defaults.
16:30:43.702 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener, org.springframework.test.context.event.EventPublishingTestExecutionListener, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener, org.springframework.security.test.context.support.ReactorContextTestExecutionListener]
16:30:43.703 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@1c6804cd, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@655f7ea, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@549949be, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@4b3a45f1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@17a87e37, org.springframework.test.context.transaction.TransactionalTestExecutionListener@3eeb318f, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@20a14b55, org.springframework.test.context.event.EventPublishingTestExecutionListener@39ad977d, org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener@6da00fb9, org.springframework.security.test.context.support.ReactorContextTestExecutionListener@a202ccb, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@20f12539, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@75b25825, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@18025ced, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@13cf7d52, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@3a3e4aff, org.springframework.boot.test.autoconfigure.webservices.client.MockWebServiceServerTestExecutionListener@5d2a4eed]
16:30:43.703 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.703 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.703 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.703 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.703 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.703 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest]
16:30:43.754 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.754 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
[INFO] Running eu.openanalytics.containerproxy.test.proxy.TestProxyService
16:30:43.757 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.757 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.758 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.758 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.767 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@1433046b testClass = TestProxyService, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@3f446bef testClass = TestProxyService, locations = '{}', classes = '{class eu.openanalytics.containerproxy.test.proxy.TestProxyService$TestConfiguration, class eu.openanalytics.containerproxy.ContainerProxyApplication, class eu.openanalytics.containerproxy.test.proxy.TestProxyService$TestConfiguration, class eu.openanalytics.containerproxy.ContainerProxyApplication}', contextInitializerClasses = '[]', activeProfiles = '{test}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@242b836, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@942a29c, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@38cee291, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@1c7696c6, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@5b1669c0, org.springframework.boot.test.context.SpringBootTestArgs@1], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true]], class annotated with @DirtiesContext [false] with mode [null].
16:30:43.770 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.770 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [eu.openanalytics.containerproxy.test.proxy.TestProxyService]
16:30:43.793 [main] DEBUG org.springframework.core.env.StandardEnvironment - Activating profiles [test]
16:30:43.798 [main] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-10-12 16:30:44.302  INFO 48120 --- [           main] e.o.c.test.proxy.TestProxyService        : Starting TestProxyService on NicksMacbookPro.local with PID 48120 (started by thinkitconsulting in /Users/thinkitconsulting/development/git/__old_containerproxy)
2020-10-12 16:30:44.303  INFO 48120 --- [           main] e.o.c.test.proxy.TestProxyService        : The following profiles are active: test
2020-10-12 16:30:45.409  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-10-12 16:30:45.412  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2020-10-12 16:30:45.470  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 40ms. Found 0 Redis repository interfaces.
2020-10-12 16:30:46.875  INFO 48120 --- [           main] e.o.c.stat.StatCollectorRegistry         : Disabled. Usage statistics will not be processed.
2020-10-12 16:30:47.161  INFO 48120 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@1a5b7394, org.springframework.security.web.context.SecurityContextPersistenceFilter@410382cb, org.springframework.security.web.header.HeaderWriterFilter@604c7e9b, org.springframework.security.web.csrf.CsrfFilter@3d8d52be, org.springframework.security.web.authentication.logout.LogoutFilter@6f7a20da, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@393ae7a0, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@26f75d9c, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@29f3185c, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@5e541ef9, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7717b4a0, org.springframework.security.web.session.SessionManagementFilter@70485aa, org.springframework.security.web.access.ExceptionTranslationFilter@4a336377, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@78bad03b]
2020-10-12 16:30:47.195  WARN 48120 --- [           main] org.thymeleaf.templatemode.TemplateMode  : [THYMELEAF][main] Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead.
2020-10-12 16:30:48.218  INFO 48120 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-12 16:30:48.572  INFO 48120 --- [           main] o.s.l.c.support.AbstractContextSource    : Property 'userDn' not set - anonymous context will be used for read-write operations
2020-10-12 16:30:48.972  INFO 48120 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-10-12 16:30:49.316 ERROR 48120 --- [enerContainer-1] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:30:54.065  INFO 48120 --- [           main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-10-12 16:30:54.076  INFO 48120 --- [           main] e.o.c.test.proxy.TestProxyService        : Started TestProxyService in 10.269 seconds (JVM running for 12.154)
2020-10-12 16:30:54.079  INFO 48120 --- [           main] e.o.c.util.StartupEventListener          : Started ContainerProxy 0.8.5 (ContainerProxy null)
2020-10-12 16:30:54.333 ERROR 48120 --- [enerContainer-2] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:30:55.260  INFO 48120 --- [           main] c.s.docker.client.DefaultDockerClient    : Starting container with Id: 2baae3ad53de9e83d3b8f0b29983c8592068ec764ce629f0ba46e3d30ca8c4af
NOOP
2020-10-12 16:30:55.585  INFO 48120 --- [           main] e.o.containerproxy.service.ProxyService  : Proxy activated [user: null] [spec: 01_hello] [id: 5b027881-4f00-4238-a04c-b5c82014728a]
2020-10-12 16:30:55.767  INFO 48120 --- [           main] e.o.containerproxy.service.ProxyService  : Proxy released [user: null] [spec: 01_hello] [id: 5b027881-4f00-4238-a04c-b5c82014728a]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 12.018 s - in eu.openanalytics.containerproxy.test.proxy.TestProxyService
[INFO] Running eu.openanalytics.containerproxy.test.proxy.TestIntegrationOnKube
2020-10-12 16:30:59.350 ERROR 48120 --- [enerContainer-3] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:00.022 ERROR 48120 --- [pool-3-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultSetOperations.members(DefaultSetOperations.java:214) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundSetOperations.members(DefaultBoundSetOperations.java:152) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisSessionExpirationPolicy.cleanExpiredSessions(RedisSessionExpirationPolicy.java:129) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.cleanupExpiredSessions(RedisIndexedSessionRepository.java:407) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) ~[spring-context-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 22 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:04.388 ERROR 48120 --- [enerContainer-4] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:06.122  WARN 48120 --- [           main] o.a.c.r.ArquillianConditionalRunner      : Unsatisfied assumption in test class eu.openanalytics.containerproxy.test.proxy.TestIntegrationOnKube. Requirement problem: Error while checking kubernetes version: [Connect timed out].
[WARNING] Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 10.322 s - in eu.openanalytics.containerproxy.test.proxy.TestIntegrationOnKube
[INFO] Running eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-10-12 16:31:06.202  INFO 48120 --- [           main] e.o.c.test.proxy.TestConcurrentUsers     : Starting TestConcurrentUsers on NicksMacbookPro.local with PID 48120 (started by thinkitconsulting in /Users/thinkitconsulting/development/git/__old_containerproxy)
2020-10-12 16:31:06.202  INFO 48120 --- [           main] e.o.c.test.proxy.TestConcurrentUsers     : The following profiles are active: test
2020-10-12 16:31:06.591  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-10-12 16:31:06.591  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2020-10-12 16:31:06.618  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 26ms. Found 0 Redis repository interfaces.
2020-10-12 16:31:07.007  WARN 48120 --- [           main] io.undertow.websockets.jsr               : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2020-10-12 16:31:07.027  INFO 48120 --- [           main] io.undertow.servlet                      : Initializing Spring embedded WebApplicationContext
2020-10-12 16:31:07.028  INFO 48120 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 822 ms
2020-10-12 16:31:07.234  INFO 48120 --- [           main] o.s.boot.web.servlet.RegistrationBean    : Filter orderedFormContentFilter was not registered (disabled)
2020-10-12 16:31:07.397  INFO 48120 --- [           main] e.o.c.stat.StatCollectorRegistry         : Disabled. Usage statistics will not be processed.
2020-10-12 16:31:07.537  INFO 48120 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@36361951, org.springframework.security.web.context.SecurityContextPersistenceFilter@5e05dd42, org.springframework.security.web.header.HeaderWriterFilter@39e0fe23, org.springframework.security.web.csrf.CsrfFilter@26c7940a, org.springframework.security.web.authentication.logout.LogoutFilter@6d98e607, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@6149adee, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@24c8bc1e, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@246701d5, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1ac8f29c, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@16488ed7, org.springframework.security.web.session.SessionManagementFilter@44f86613, org.springframework.security.web.access.ExceptionTranslationFilter@5a640f98, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@33903444]
2020-10-12 16:31:07.548  WARN 48120 --- [           main] org.thymeleaf.templatemode.TemplateMode  : [THYMELEAF][main] Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead.
2020-10-12 16:31:07.777  INFO 48120 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:07.997  INFO 48120 --- [           main] o.s.l.c.support.AbstractContextSource    : Property 'userDn' not set - anonymous context will be used for read-write operations
2020-10-12 16:31:08.309  INFO 48120 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-10-12 16:31:08.402  INFO 48120 --- [           main] io.undertow                              : starting server: Undertow - 2.1.3.Final
2020-10-12 16:31:08.418  INFO 48120 --- [           main] org.xnio                                 : XNIO version 3.8.0.Final
2020-10-12 16:31:08.427  INFO 48120 --- [           main] org.xnio.nio                             : XNIO NIO Implementation Version 3.8.0.Final
2020-10-12 16:31:08.488  INFO 48120 --- [           main] org.jboss.threads                        : JBoss Threads version 3.1.0.Final
2020-10-12 16:31:08.536  INFO 48120 --- [           main] o.s.b.w.e.undertow.UndertowWebServer     : Undertow started on port(s) 51834 (http)
2020-10-12 16:31:08.550 ERROR 48120 --- [enerContainer-1] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:09.403 ERROR 48120 --- [enerContainer-5] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:13.547  INFO 48120 --- [           main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-10-12 16:31:13.548  INFO 48120 --- [           main] e.o.c.test.proxy.TestConcurrentUsers     : Started TestConcurrentUsers in 7.407 seconds (JVM running for 31.626)
2020-10-12 16:31:13.550  INFO 48120 --- [           main] e.o.c.util.StartupEventListener          : Started ContainerProxy 0.8.5 (ContainerProxy null)
2020-10-12 16:31:13.565 ERROR 48120 --- [enerContainer-2] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:13.666  INFO 48120 --- [  XNIO-1 task-1] io.undertow.servlet                      : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-10-12 16:31:13.667  INFO 48120 --- [  XNIO-1 task-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-10-12 16:31:13.683  INFO 48120 --- [  XNIO-1 task-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 16 ms
2020-10-12 16:31:13.887  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.UserService   : User logged in [user: demo, authorities: []]
2020-10-12 16:31:14.092  INFO 48120 --- [  XNIO-1 task-1] c.s.docker.client.DefaultDockerClient    : Starting container with Id: 02794f2e194f10dd83f2109dfbbd38ecc83f98696522973dd2f7c89f82d965c7
2020-10-12 16:31:14.420 ERROR 48120 --- [enerContainer-6] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:14.427  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.ProxyService  : Proxy activated [user: demo] [spec: 01_hello] [id: 72c7b10f-a4b9-437c-a3c8-ef062546cb65]
2020-10-12 16:31:14.494 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005023: Exception handling request to /api/proxy/01_hello

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1423) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 64 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:14.532 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005022: Exception generating error page /error

java.lang.RuntimeException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:507) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:427) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:308) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1423) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:186) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:501) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	... 17 common frames omitted
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 55 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:14.652  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.UserService   : User logged in [user: demo, authorities: []]
2020-10-12 16:31:14.771  INFO 48120 --- [  XNIO-1 task-1] c.s.docker.client.DefaultDockerClient    : Starting container with Id: 0f605df63fc23a4a7150ffcaefb9041c4779d74b288c00fbe0aa4cac985c58da
2020/10/12 16:31:14 socat[48181] E write(7, 0x7ff535008600, 5): Broken pipe
2020-10-12 16:31:15.062  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.ProxyService  : Proxy activated [user: demo] [spec: 01_hello] [id: b229267e-0c11-4189-8f65-5a956721882e]
2020-10-12 16:31:15.090 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005023: Exception handling request to /api/proxy/01_hello

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 64 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:15.105 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005022: Exception generating error page /error

java.lang.RuntimeException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:507) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:427) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:308) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:186) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:501) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	... 17 common frames omitted
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 55 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:15.206  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.UserService   : User logged in [user: demo, authorities: []]
2020-10-12 16:31:15.315  INFO 48120 --- [  XNIO-1 task-1] c.s.docker.client.DefaultDockerClient    : Starting container with Id: f2147c90d06b3002d1b93879ff8a563bb1687b20dff54e8dce3c3bd873cc5b9b
2020-10-12 16:31:15.628  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.ProxyService  : Proxy activated [user: demo] [spec: 01_hello] [id: 4ee1d164-255d-42c4-b6cb-d517758a081f]
2020-10-12 16:31:15.637 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005023: Exception handling request to /api/proxy/01_hello

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 64 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:15.647 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005022: Exception generating error page /error

java.lang.RuntimeException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:507) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:427) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:308) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:186) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:501) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	... 17 common frames omitted
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 55 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:15.744  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.UserService   : User logged in [user: demo, authorities: []]
2020-10-12 16:31:15.865  INFO 48120 --- [  XNIO-1 task-1] c.s.docker.client.DefaultDockerClient    : Starting container with Id: 121df924835de2db5f3c4be643a1a4fefbf97891303afb2e8b64c7fcd3048db2
2020-10-12 16:31:16.199  INFO 48120 --- [  XNIO-1 task-1] e.o.containerproxy.service.ProxyService  : Proxy activated [user: demo] [spec: 01_hello] [id: e89bf5b5-8988-4565-ae8b-c7c69d6243c9]
2020-10-12 16:31:16.207 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005023: Exception handling request to /api/proxy/01_hello

org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 64 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

2020-10-12 16:31:16.218 ERROR 48120 --- [  XNIO-1 task-1] io.undertow.request                      : UT005022: Exception generating error page /error

java.lang.RuntimeException: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:507) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:427) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:308) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449) ~[jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]
Caused by: org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1534) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1442) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1228) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1211) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedConnection(LettuceConnectionFactory.java:975) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getConnection(LettuceConnectionFactory.java:360) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.doGetConnection(RedisConnectionUtils.java:134) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:97) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisConnectionUtils.getConnection(RedisConnectionUtils.java:84) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:215) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:188) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:96) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultHashOperations.putAll(DefaultHashOperations.java:150) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.core.DefaultBoundHashOperations.putAll(DefaultBoundHashOperations.java:147) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.saveDelta(RedisIndexedSessionRepository.java:795) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.save(RedisIndexedSessionRepository.java:783) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository$RedisSession.access$000(RedisIndexedSessionRepository.java:670) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:398) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.data.redis.RedisIndexedSessionRepository.save(RedisIndexedSessionRepository.java:249) ~[spring-session-data-redis-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.commitSession(SessionRepositoryFilter.java:225) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.access$100(SessionRepositoryFilter.java:192) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:144) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.3.0.RELEASE.jar:2.3.0.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:186) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	at io.undertow.servlet.spec.RequestDispatcherImpl.error(RequestDispatcherImpl.java:501) ~[undertow-servlet-2.1.3.Final.jar:2.1.3.Final]
	... 17 common frames omitted
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:242) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at io.lettuce.core.RedisClient.connect(RedisClient.java:206) ~[lettuce-core-5.3.3.RELEASE.jar:5.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at java.base/java.util.Optional.orElseGet(Optional.java:362) ~[na:na]
	at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:115) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1440) ~[spring-data-redis-2.3.3.RELEASE.jar:2.3.3.RELEASE]
	... 55 common frames omitted
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method) ~[na:na]
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:579) ~[na:na]
	at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:820) ~[na:na]
	at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[netty-transport-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.51.Final.jar:4.1.51.Final]
	at java.base/java.lang.Thread.run(Thread.java:830) ~[na:na]

[ERROR] Tests run: 4, Failures: 4, Errors: 0, Skipped: 0, Time elapsed: 10.06 s <<< FAILURE! - in eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers
[ERROR] test2Users2Sessions1Spec  Time elapsed: 0.999 s  <<< FAILURE!
java.lang.AssertionError: expected:<201> but was:<500>
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.loginAndLaunchProxy(TestConcurrentUsers.java:121)
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.test2Users2Sessions1Spec(TestConcurrentUsers.java:96)

[ERROR] test2Users2Sessions2Specs  Time elapsed: 0.556 s  <<< FAILURE!
java.lang.AssertionError: expected:<201> but was:<500>
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.loginAndLaunchProxy(TestConcurrentUsers.java:121)
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.test2Users2Sessions2Specs(TestConcurrentUsers.java:104)

[ERROR] test1User2Sessions1Spec  Time elapsed: 0.54 s  <<< FAILURE!
java.lang.AssertionError: expected:<201> but was:<500>
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.loginAndLaunchProxy(TestConcurrentUsers.java:121)
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.test1User2Sessions1Spec(TestConcurrentUsers.java:80)

[ERROR] test1User2Sessions2Specs  Time elapsed: 0.57 s  <<< FAILURE!
java.lang.AssertionError: expected:<201> but was:<500>
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.loginAndLaunchProxy(TestConcurrentUsers.java:121)
	at eu.openanalytics.containerproxy.test.proxy.TestConcurrentUsers.test1User2Sessions2Specs(TestConcurrentUsers.java:88)

[INFO] Running eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-10-12 16:31:16.268  INFO 48120 --- [           main] e.o.c.test.auth.NoAuthenticationTest     : Starting NoAuthenticationTest on NicksMacbookPro.local with PID 48120 (started by thinkitconsulting in /Users/thinkitconsulting/development/git/__old_containerproxy)
2020-10-12 16:31:16.268  INFO 48120 --- [           main] e.o.c.test.auth.NoAuthenticationTest     : The following profiles are active: test-no-auth
2020-10-12 16:31:16.635  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-10-12 16:31:16.635  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2020-10-12 16:31:16.659  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 24ms. Found 0 Redis repository interfaces.
2020-10-12 16:31:17.033  INFO 48120 --- [           main] e.o.c.stat.StatCollectorRegistry         : Disabled. Usage statistics will not be processed.
2020-10-12 16:31:17.161  INFO 48120 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@4b5c84be, org.springframework.security.web.context.SecurityContextPersistenceFilter@78fb4f7f, org.springframework.security.web.header.HeaderWriterFilter@685efb22, org.springframework.security.web.csrf.CsrfFilter@578036a2, org.springframework.security.web.authentication.logout.LogoutFilter@4746d52d, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6a7c1725, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@756476a3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@404bca88, org.springframework.security.web.session.SessionManagementFilter@24a696c0, org.springframework.security.web.access.ExceptionTranslationFilter@3d45ea17, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@439b893a]
2020-10-12 16:31:17.176  WARN 48120 --- [           main] org.thymeleaf.templatemode.TemplateMode  : [THYMELEAF][main] Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead.
2020-10-12 16:31:17.545  INFO 48120 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:17.725  INFO 48120 --- [           main] o.s.l.c.support.AbstractContextSource    : Property 'userDn' not set - anonymous context will be used for read-write operations
2020-10-12 16:31:18.150  INFO 48120 --- [           main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2020-10-12 16:31:18.150  INFO 48120 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2020-10-12 16:31:18.165  INFO 48120 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-10-12 16:31:18.241  INFO 48120 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 91 ms
2020-10-12 16:31:18.276 ERROR 48120 --- [enerContainer-1] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:18.571 ERROR 48120 --- [enerContainer-3] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:19.427 ERROR 48120 --- [enerContainer-7] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:23.273  INFO 48120 --- [           main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-10-12 16:31:23.275  INFO 48120 --- [           main] e.o.c.test.auth.NoAuthenticationTest     : Started NoAuthenticationTest in 7.049 seconds (JVM running for 41.353)
2020-10-12 16:31:23.276  INFO 48120 --- [           main] e.o.c.util.StartupEventListener          : Started ContainerProxy 0.8.5 (ContainerProxy null)
2020-10-12 16:31:23.286 ERROR 48120 --- [enerContainer-2] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.085 s - in eu.openanalytics.containerproxy.test.auth.NoAuthenticationTest
[INFO] Running eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-10-12 16:31:23.372  INFO 48120 --- [           main] e.o.c.t.auth.SimpleAuthenticationTest    : Starting SimpleAuthenticationTest on NicksMacbookPro.local with PID 48120 (started by thinkitconsulting in /Users/thinkitconsulting/development/git/__old_containerproxy)
2020-10-12 16:31:23.372  INFO 48120 --- [           main] e.o.c.t.auth.SimpleAuthenticationTest    : The following profiles are active: test-simple-auth
2020-10-12 16:31:23.576 ERROR 48120 --- [enerContainer-4] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:23.697  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-10-12 16:31:23.697  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2020-10-12 16:31:23.719  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 21ms. Found 0 Redis repository interfaces.
2020-10-12 16:31:24.027  INFO 48120 --- [           main] e.o.c.stat.StatCollectorRegistry         : Disabled. Usage statistics will not be processed.
2020-10-12 16:31:24.143  INFO 48120 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@5d7a274e, org.springframework.security.web.context.SecurityContextPersistenceFilter@787073b3, org.springframework.security.web.header.HeaderWriterFilter@4a115c4c, org.springframework.security.web.csrf.CsrfFilter@1de618b3, org.springframework.security.web.authentication.logout.LogoutFilter@4b8cf10f, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@64a552, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@63fa7643, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@53a52b3f, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1396ee3b, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@5622e162, org.springframework.security.web.session.SessionManagementFilter@55feda3f, org.springframework.security.web.access.ExceptionTranslationFilter@3473e1bb, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@545c3628]
2020-10-12 16:31:24.153  WARN 48120 --- [           main] org.thymeleaf.templatemode.TemplateMode  : [THYMELEAF][main] Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead.
2020-10-12 16:31:24.436 ERROR 48120 --- [enerContainer-8] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:24.488  INFO 48120 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:24.652  INFO 48120 --- [           main] o.s.l.c.support.AbstractContextSource    : Property 'userDn' not set - anonymous context will be used for read-write operations
2020-10-12 16:31:24.870  INFO 48120 --- [           main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2020-10-12 16:31:24.870  INFO 48120 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2020-10-12 16:31:24.877  INFO 48120 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-10-12 16:31:24.901  INFO 48120 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 31 ms
2020-10-12 16:31:24.927 ERROR 48120 --- [enerContainer-1] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:28.291 ERROR 48120 --- [enerContainer-3] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:28.582 ERROR 48120 --- [enerContainer-5] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:29.443 ERROR 48120 --- [enerContainer-9] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:29.932 ERROR 48120 --- [enerContainer-2] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:29.935  INFO 48120 --- [           main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-10-12 16:31:29.936  INFO 48120 --- [           main] e.o.c.t.auth.SimpleAuthenticationTest    : Started SimpleAuthenticationTest in 6.608 seconds (JVM running for 48.014)
2020-10-12 16:31:29.937  INFO 48120 --- [           main] e.o.c.util.StartupEventListener          : Started ContainerProxy 0.8.5 (ContainerProxy null)
2020-10-12 16:31:30.101  INFO 48120 --- [           main] e.o.containerproxy.service.UserService   : User logged in [user: demo, authorities: []]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 6.778 s <<< FAILURE! - in eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest
[ERROR] authenticateUser  Time elapsed: 0.174 s  <<< ERROR!
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest.authenticateUser(SimpleAuthenticationTest.java:56)
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at eu.openanalytics.containerproxy.test.auth.SimpleAuthenticationTest.authenticateUser(SimpleAuthenticationTest.java:56)
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused

[INFO] Running eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.3.RELEASE)

2020-10-12 16:31:30.135  INFO 48120 --- [           main] e.o.c.test.auth.LDAPAuthenticationTest   : Starting LDAPAuthenticationTest on NicksMacbookPro.local with PID 48120 (started by thinkitconsulting in /Users/thinkitconsulting/development/git/__old_containerproxy)
2020-10-12 16:31:30.136  INFO 48120 --- [           main] e.o.c.test.auth.LDAPAuthenticationTest   : The following profiles are active: test-ldap-auth
2020-10-12 16:31:30.387  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2020-10-12 16:31:30.387  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
2020-10-12 16:31:30.410  INFO 48120 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 18ms. Found 0 Redis repository interfaces.
2020-10-12 16:31:30.715  INFO 48120 --- [           main] e.o.c.stat.StatCollectorRegistry         : Disabled. Usage statistics will not be processed.
2020-10-12 16:31:30.759  INFO 48120 --- [           main] s.s.l.DefaultSpringSecurityContextSource :  URL 'ldap://ldap.forumsys.com:389/dc=example,dc=com', root DN is 'dc=example,dc=com'
2020-10-12 16:31:30.763  INFO 48120 --- [           main] .s.s.l.u.DefaultLdapAuthoritiesPopulator : groupSearchBase is empty. Searches will be performed from the context source base
2020-10-12 16:31:30.868  INFO 48120 --- [           main] o.s.s.web.DefaultSecurityFilterChain     : Creating filter chain: any request, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@ef59a55, org.springframework.security.web.context.SecurityContextPersistenceFilter@62cdff2b, org.springframework.security.web.header.HeaderWriterFilter@64898aa7, org.springframework.security.web.csrf.CsrfFilter@41f53068, org.springframework.security.web.authentication.logout.LogoutFilter@1908483f, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@287f1aaf, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@b54a7b9, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@29400267, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@1b4695a, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@47ce059f, org.springframework.security.web.session.SessionManagementFilter@a53f879, org.springframework.security.web.access.ExceptionTranslationFilter@12fb37b2, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@15bb3db9]
2020-10-12 16:31:30.880  WARN 48120 --- [           main] org.thymeleaf.templatemode.TemplateMode  : [THYMELEAF][main] Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead.
2020-10-12 16:31:31.203  INFO 48120 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:31.365  INFO 48120 --- [           main] o.s.l.c.support.AbstractContextSource    : Property 'userDn' not set - anonymous context will be used for read-write operations
2020-10-12 16:31:31.574  INFO 48120 --- [           main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2020-10-12 16:31:31.575  INFO 48120 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2020-10-12 16:31:31.581  INFO 48120 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-10-12 16:31:31.605  INFO 48120 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 30 ms
2020-10-12 16:31:31.628 ERROR 48120 --- [enerContainer-1] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:33.301 ERROR 48120 --- [enerContainer-4] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:33.589 ERROR 48120 --- [enerContainer-6] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:34.445 ERROR 48120 --- [nerContainer-10] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:34.940 ERROR 48120 --- [enerContainer-3] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:36.633 ERROR 48120 --- [enerContainer-2] o.s.d.r.l.RedisMessageListenerContainer  : Connection failure occurred. Restarting subscription task after 5000 ms
2020-10-12 16:31:36.637  INFO 48120 --- [           main] s.a.ScheduledAnnotationBeanPostProcessor : No TaskScheduler/ScheduledExecutorService bean found for scheduled processing
2020-10-12 16:31:36.638  INFO 48120 --- [           main] e.o.c.test.auth.LDAPAuthenticationTest   : Started LDAPAuthenticationTest in 6.523 seconds (JVM running for 54.716)
2020-10-12 16:31:36.638  INFO 48120 --- [           main] e.o.c.util.StartupEventListener          : Started ContainerProxy 0.8.5 (ContainerProxy null)
2020-10-12 16:31:37.743  INFO 48120 --- [           main] e.o.containerproxy.service.UserService   : User logged in [user: tesla, authorities: [ROLE_ITALIANS, ROLE_SCIENTISTS]]
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 7.637 s <<< FAILURE! - in eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest
[ERROR] authenticateUser  Time elapsed: 1.116 s  <<< ERROR!
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest.authenticateUser(LDAPAuthenticationTest.java:56)
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
	at eu.openanalytics.containerproxy.test.auth.LDAPAuthenticationTest.authenticateUser(LDAPAuthenticationTest.java:56)
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:6379
Caused by: java.net.ConnectException: Connection refused

2020-10-12 16:31:37.782  INFO 48120 --- [extShutdownHook] io.undertow                              : stopping server: Undertow - 2.1.3.Final
2020-10-12 16:31:37.788  INFO 48120 --- [extShutdownHook] io.undertow.servlet                      : Destroying Spring FrameworkServlet 'dispatcherServlet'
2020-10-12 16:31:37.788  INFO 48120 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:37.788  INFO 48120 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:37.789  INFO 48120 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:37.790  INFO 48120 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-10-12 16:31:37.791  INFO 48120 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
[INFO] 
[INFO] Results:
[INFO] 
[ERROR] Failures: 
[ERROR]   TestConcurrentUsers.test1User2Sessions1Spec:80->loginAndLaunchProxy:121 expected:<201> but was:<500>
[ERROR]   TestConcurrentUsers.test1User2Sessions2Specs:88->loginAndLaunchProxy:121 expected:<201> but was:<500>
[ERROR]   TestConcurrentUsers.test2Users2Sessions1Spec:96->loginAndLaunchProxy:121 expected:<201> but was:<500>
[ERROR]   TestConcurrentUsers.test2Users2Sessions2Specs:104->loginAndLaunchProxy:121 expected:<201> but was:<500>
[ERROR] Errors: 
[ERROR]   LDAPAuthenticationTest.authenticateUser:56 ยป RedisConnectionFailure Unable to ...
[ERROR]   SimpleAuthenticationTest.authenticateUser:56 ยป RedisConnectionFailure Unable t...
[INFO] 
[ERROR] Tests run: 9, Failures: 4, Errors: 2, Skipped: 1
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:04 min
[INFO] Finished at: 2020-10-12T16:31:39+01:00
[INFO] Final Memory: 68M/247M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project containerproxy: There are test failures.
[ERROR] 
[ERROR] Please refer to /Users/thinkitconsulting/development/git/__old_containerproxy/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Can anyone help with this please? I can see the build is failing in https://travis-ci.org/github/openanalytics/containerproxy for the same reason. Thanks

Error during mvn install

Hello, there are some problems with building the package:

During tests executions i faced the error:

eu.openanalytics.containerproxy.ContainerProxyException: Failed to start container
at eu.openanalytics.containerproxy.test.proxy.TestProxyService.launchProxy(TestProxyService.java:61)
Caused by: com.spotify.docker.client.exceptions.DockerRequestException:
Request error: POST http://localhost:2375/containers/cfccf877155f36a9db74ceb66997f32c60d54dc228bde1c356c9313ca40136dc/start: 500, body: {"message":"driver failed programming external connectivity on endpoint
hopeful_kare (31ad867b6789b97ffc0417ea1fd0b6615e697dd831e3f7c7f2a10432aba37816): Bind for 0.0.0.0:20000 failed: port is already allocated"}

    at eu.openanalytics.containerproxy.test.proxy.TestProxyService.launchProxy(TestProxyService.java:61)

Caused by: javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error

Extracting Status Codes from Requests

I would like to extract the status codes to be able to create custom error pages for different errors.
As implemented here:

Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
			int statusCode = Integer.parseInt(status.toString());
			if (statusCode == HttpStatus.NOT_FOUND.value()) {
				shortError = "Not found";
				description = "The requested page was not found";
			} else if (statusCode == HttpStatus.FORBIDDEN.value()) {
				shortError = "Forbidden";
				description = "You do not have access to this page";
			} else if (statusCode == HttpStatus.METHOD_NOT_ALLOWED.value()) {
				shortError = "Method not allowed";
			}
		}
prepareMap(map);
map.put("mainPage", ServletUriComponentsBuilder.fromCurrentContextPath().build().toUriString());
map.put("shortError", shortError);
map.put("description", description);

Inside the ErrorController, the status code is not shared in the Thymeleaf mapper and instead a short error text is shared. As far as I have looked, there doesn't seem to be any way currently to extract the status codes and pass them through Thymeleaf.
Any suggestions would be very appreciated!

OpenId Refresh token is not passed as container variable

Hi,
I am trying to pass the Refresh Token variable to a pod, but have not yet been successful.

Setup:

Shinyproxy 2.6.0 running in a pod on an Azure Kubernetes cluster
Openid authentication
Scope: {appid}/.default
the container variable is added to the app in the application yml:
container-env: SHINYPROXY_REFRESH_TOKEN: โ€œ#{oidcUser.refreshToken}โ€

Problem is that the Refresh Token value stays empty when running the pod.

Does anyone know how to fix this?

Thanks in advance!
Rutger

Google social sign is broken for newer Google projects

Currently containerproxy depends on an out of date version of spring-social-google: 1.0.0.RELEASE.

containerproxy/pom.xml

Lines 157 to 159 in 9d8295a

<groupId>org.springframework.social</groupId>
<artifactId>spring-social-google</artifactId>
<version>1.0.0.RELEASE</version>

The current version is 1.1.3 with support for the newer API.

The package also seems to have a newer groupId: com.github.spring-social (rather than org.springframework.social)

Here is information on the old API: https://developers.google.com/people/legacy

Because the old API is used I get a 403 error when Google redirects authenticated users back to shinyproxy:

2020-06-27 17:17:49.295  WARN 17745 --- [  XNIO-2 task-8] o.s.social.connect.web.ConnectSupport    : HttpClientErrorException while completing connection: 403 Forbidden
2020-06-27 17:17:49.296  WARN 17745 --- [  XNIO-2 task-8] o.s.social.connect.web.ConnectSupport    :       Response body: {
  "error": {
    "code": 403,
    "message": "Legacy People API has not been used in project 123456789 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/legacypeople.googleapis.com/overview?project=123456789 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developers console API activation",
            "url": "https://console.developers.google.com/apis/api/legacypeople.googleapis.com/overview?project=123456789"
          }
        ]
      }
    ]
  }
}

2020-06-27 17:17:49.304 ERROR 17745 --- [  XNIO-2 task-8] o.s.s.c.web.ProviderSignInController     : Exception while completing OAuth 2 connection:

org.springframework.web.client.HttpClientErrorException: 403 Forbidden
     at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:79) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:777) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:730) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:686) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:334) ~[spring-web-5.0.4.RELEASE.jar!/:5.0.4.RELEASE]
     at org.springframework.social.google.api.impl.AbstractGoogleApiOperations.getEntity(AbstractGoogleApiOperations.java:50) ~[spring-social-google-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
     at org.springframework.social.google.api.plus.impl.PlusTemplate.getPerson(PlusTemplate.java:105) ~[spring-social-google-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
     at org.springframework.social.google.api.plus.impl.PlusTemplate.getGoogleProfile(PlusTemplate.java:110) ~[spring-social-google-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
     at org.springframework.social.google.connect.GoogleAdapter.fetchUserProfile(GoogleAdapter.java:51) ~[spring-social-google-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
     at org.springframework.social.google.connect.GoogleAdapter.fetchUserProfile(GoogleAdapter.java:31) ~[spring-social-google-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
     at org.springframework.social.google.connect.GoogleConnectionFactory.extractProviderUserId(GoogleConnectionFactory.java:37) ~[spring-social-google-1.0.0.RELEASE.jar!/:1.0.0.RELEASE]
     at org.springframework.social.connect.support.OAuth2ConnectionFactory.createConnection(OAuth2ConnectionFactory.java:93) ~[spring-social-core-1.1.6.RELEASE.jar!/:1.1.6.RELEASE]
     at org.springframework.social.connect.web.ConnectSupport.completeConnection(ConnectSupport.java:161) ~[spring-social-web-1.1.6.RELEASE.jar!/:1.1.6.RELEASE]
     at org.springframework.social.connect.web.ProviderSignInController.oauth2Callback(ProviderSignInController.java:228) ~[spring-social-web-1.1.6.RELEASE.jar!/:1.1.6.RELEASE]

Support for SAML Decryption (decrypting SAML asserations

Hello!

I know that containerproxy already has support for signing SAML requests. (I believe that was added to support SAML Logout?) I would like to request support for decrypting SAML assertions.

I see that the call to eu.openanalytics.containerproxy.auth.impl.saml.SAMLConfiguration.relyingPartyRegistration() does the setup on lines 151-154, using the configuration pulled through getSingingCredential(). Since that support is already in place, I wonder if it would be possible to copy that code, to provide decryptionX509Credentials to Spring's RelyingPartyRegistration. The problem is, I don't have much experience writing Java code, and no experience with Java build environments, which is why I'm not providing a PR myself, just an enhancement request.

So, why am I asking for it? Because my work is asking for it. I'm trying to set up Shinyproxy, using SAML authentication, where the IdP is running Shibboleth. My work has a policy, effective since late 2019, that new SPs must support decrypting SAML assertions, or go through an exceptions process. As an explanation for this need, they reference two vulnerabilities in SAML SPs, which would have been mitigated by using encrypted SAML assertions:

(Our Shibboleth IdP also supports OIDC, but that does not work, because of #85.)

So, that is my enhancement request. I apologize if I missed any information, and if you have any questions about my request, please let me know!

Shinyproxy Produces a Warning when Starting if Passing in `--spring.config.location` via CLI

eu/openanalytics/containerproxy/ContainerProxyApplication.java:127

boolean hasExternalConfig = Files.exists(Paths.get(CONFIG_FILENAME));
if (!hasExternalConfig) {
	app.setAdditionalProfiles(CONFIG_DEMO_PROFILE);
	Logger log = LogManager.getLogger(ContainerProxyApplication.class);
	log.warn("WARNING: Did not found configuration, using fallback configuration!");
}

As far as I understand, Spring can find an application.yml in a great many places, however the current code warns that it is only respected if it's in the same working directory as the containerproxy. Passing it in via the CLI like --spring.config.location=/my/great/path does still work but containerproxy spits out a warning.

Is it possible to only produce this warning if Spring cannot find an application.yml?

Looking forward to hearing from you.

Feature: docker swarm automatically download image when not available on a node

Hello,

When using docker swarm, docker swarm itself will download the image when an image is not available on a node. While the Shinyproxy current behaviour is that an image on a public repo(no auth) will succeed but when on a private repo(need auth) will fail.

I will create a Pull Request for this feature. Please review and see if it can be accepted. The code need be changed on both containerproxy and shinyproxy.

Pull request

TL;DR
in containerproxy source code, it creates a service without authentication, and it is the root cause.

String serviceId = dockerClient.createService(serviceSpecBuilder.build()).id();

to fix that, it needs to pass authentication info like this

serviceId = dockerClient.createService(serviceSpecBuilder.build(), registryAuth).id();

To better function for shinyproxy, I am using three new container settings(container-auth-domain, container-auth-user and container-auth-password) in application.xml to give users more flexibility and fewer steps compare to use docker default configuration ~/.docker/config.json. (It will hit a bug if use docker default configuration which jersey-common version is not the same as the docker-client's dependency. org.glassfish.jersey.internal.util.Base64 package is removed from version 2.30 which the end output from shinyproxy jar)

For testing
if you want to skip java building phase, the jar file can be downloaded from here
the application.xml can be something like this.

proxy:
  title: ShinyProxy Test
  port: 8080
  container-wait-time: 60000
  authentication: simple
  users:
    - name: admin
      password: admin
      groups: shiny-admin
    - name: jeff
      password: password
  container-backend: docker-swarm
  docker:
    internal-networking: true
  specs:
    - id: 01_hello
      display-name: Hello Application
      description: Application which demonstrates the basics of a Shiny app
      container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
      container-image: openanalytics/shinyproxy-demo
      container-network: shiny_shiny-net
    - id: 02_hello_private_repo
      display-name: Hello Application from private repo
      description: Application which demonstrates using private repo
      container-cmd: ["R", "-e", "shinyproxy::run_01_hello()"]
      container-image: ziyunxiao/shinyproxy-demo
      container-auth-domain: docker.io
      container-auth-user: ziyunxiao
      container-auth-password: yourpassword
      container-network: shiny_shiny-net
    - id: 06_tabsets
      container-cmd: ["R", "-e", "shinyproxy::run_06_tabsets()"]
      container-image: openanalytics/shinyproxy-demo
      container-network: shiny_shiny-net
    - id: shiny_admin_dashboard
      display-name: Shiny Admin
      description: This application used for admin only. It includes only Keycloak Admin info for now.
      container-cmd: ["./start.sh"]
      container-image: yourowndomain.com/yourownimage:lastest
      container-auth-domain: yourowndomain
      container-auth-user: admin
      container-auth-password: yourpassword
      container-network: shiny_shiny-net

logging:
  level:
    root: INFO

server:
  #useForwardHeaders: true #2.3.1
  forward-headers-strategy: native
  #useForwardHeaders: false
  servlet.session.timeout: 36000

And to deploy shiny on docker swarm, the docker-compose.yml can be something like this

version: "3.8"

services:
  shiny:
    image: yournamespace/shinyproxy:2.5.0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /youpath/local_test/application_docker.yml:/opt/shinyproxy/application.yml
    ports:
      - 8080:8080
    networks:
      - shiny-net
    deploy:
      mode: replicated
      replicas: 1
      restart_policy:
        condition: on-failure
      placement:
        constraints:
          - node.role==manager
          - node.hostname==yournodename
          
networks:
  shiny-net:
    driver: overlay

For test deploy shiny docker stack deploy -c docker-compose.yml shiny

Thanks,

Robin

Shinyproxy Kubernetes serviceaccount roles for accessing/creating persistentvoumeclaim in application containers

Hi,

We are testing Shiny-proxy Kubernetes environment and I have given minimal permissions for a custom serviceaccount used by the main container to spin up app containers. Trying to see if the application container is able to create a PVC for configured PV, to be able to store user specific information in NFS share. Getting below error and I believe that's because the serviceaccunt does not have necessary permissions/roles to create the PVC.
What roles needs to be granted to the sa in order to fix this issue?

Caused by: io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: POST at: http://localhost:8001/api/v1/namespaces/sp/pods. Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. pods "sp-pod-fsfsfsff-4777-8ea4-b78fb3c0f5ec" is forbidden: user "system:serviceaccount:spsa:spsa" is not an admin and does not have permissions to use host bind mounts for resource . at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:503) at io.fabric8.kubernetes.client.dsl.base.OperationSupport.assertResponseCode(OperationSupport.java:440) at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:406) at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:365) at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleCreate(OperationSupport.java:234) at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleCreate(BaseOperation.java:735) at io.fabric8.kubernetes.client.dsl.base.BaseOperation.create(BaseOperation.java:325) at io.fabric8.kubernetes.client.dsl.base.BaseOperation.create(BaseOperation.java:321) at io.fabric8.kubernetes.client.dsl.base.BaseOperation.lambda$createNew$0(BaseOperation.java:336) at io.fabric8.kubernetes.api.model.DoneablePod.done(DoneablePod.java:26) at eu.openanalytics.containerproxy.backend.kubernetes.KubernetesBackend.startContainer(KubernetesBackend.java:223) at eu.openanalytics.containerproxy.backend.AbstractContainerBackend.doStartProxy(AbstractContainerBackend.java:129) at eu.openanalytics.containerproxy.backend.AbstractContainerBackend.startProxy(AbstractContainerBackend.java:110)

Container start fails, if image is not on host

Hi all!

If you try to start a Container with the DockerEngine which is not present on the host system, the start of the container fails.
This was also noticed by an other user at the shinyproxy project:
openanalytics/shinyproxy#82

I think it's ok ( try ) to pull the image everytime you start a new container.
If the image is up to date the container will start straight away.
If not it will be pulled no the host system and starts afterwards.

I added just one line of code to achieve that and will submit it as a pull request.
I'm neither a java expert nor have much experience with the container proxy project.
If you have any comments on this I'm happy to hear.
Otherwise I would love to see a release with this "feature".

Felix

Failed to start container with docker swarm mode.

Hello,

I am running Shinyproxy on docker swarm. I got the following error.

I checked the backend, the service is created and the container is also started.

Error
Status code: 500

Message: Failed to start container

Stack Trace:
eu.openanalytics.containerproxy.ContainerProxyException: Failed to start container
at eu.openanalytics.containerproxy.backend.AbstractContainerBackend.startProxy(AbstractContainerBackend.java:138)
at eu.openanalytics.containerproxy.service.ProxyService.startProxy(ProxyService.java:226)
at eu.openanalytics.shinyproxy.controllers.AppController.getOrStart(AppController.java:106)
at eu.openanalytics.shinyproxy.controllers.AppController.startApp(AppController.java:63)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:517)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:584)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:155)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91)
at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160)
at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:836)
at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 12, length 0
at java.base/java.lang.String.checkBoundsBeginEnd(Unknown Source)
at java.base/java.lang.String.substring(Unknown Source)
at eu.openanalytics.containerproxy.backend.docker.DockerSwarmBackend.calculateTarget(DockerSwarmBackend.java:153)
at eu.openanalytics.containerproxy.backend.docker.DockerSwarmBackend.startContainer(DockerSwarmBackend.java:139)
at eu.openanalytics.containerproxy.backend.AbstractContainerBackend.doStartProxy(AbstractContainerBackend.java:169)
at eu.openanalytics.containerproxy.backend.AbstractContainerBackend.startProxy(AbstractContainerBackend.java:135)
... 106 more

The shinyproxy settings like this.

  container-backend: docker-swarm
  docker:
   internal-networking: true

Could someone help take a look?

Thanks,

Robin

Support for Linux PAM authenication and authorization using Linux group memberships

It would be super awesome if ShinyProxy could support user authentication and authorization using native authentication mechanisms on Linux, just like the Shiny Server Pro version.

These days it's very easy to configure Linux systems to use remote identify services like FreeIPA, LDAP or Active Directory using the SSSD and/or Samba packages.

ShinyProxy could benefit from this because it would be very easy for ShinyProxy administrators to configure and it would provide a great alternative to the more advanced ShinyProxy authentication backends but be just as powerful

Inspirational links:

https://sssd.io/
https://www.adelton.com/apache/mod_authnz_pam/
https://www.adelton.com/apache/mod_lookup_identity/
https://ubuntu.com/engage/microsoft-active-directory
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system-level_authentication_guide/sssd

403 Error Method Not Allowed when trying to upload file

When trying to upload a file through ShinyProxy to a shiny app using a fileInput, we receive:

Error

Status code: 405
Message: Method Not Allowed
Stack Trace: n/a

ShinyProxy logs show:

2019-03-28 20:12:15.615 DEBUG 1 --- [ XNIO-2 task-4] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name 'dispatcherServlet' processing POST request for [/app_direct/shiny-mkt-campaign-recommendations/session/43b642bdfe4ca8a30f87b33c66d57200/upload/6ecc2cdeea2fc3052a0e00aa]

ย  | 2019-03-28 20:12:15.615 DEBUG 1 --- [ XNIO-2 task-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Looking up handler method for path /app_direct/shiny-mkt-campaign-recommendations/session/43b642bdfe4ca8a30f87b33c66d57200/upload/6ecc2cdeea2fc3052a0e00aa
ย  | 2019-03-28 20:12:15.616 DEBUG 1 --- [ XNIO-2 task-4] .m.m.a.ExceptionHandlerExceptionResolver : Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
ย  | 2019-03-28 20:12:15.616 DEBUG 1 --- [ XNIO-2 task-4] .w.s.m.a.ResponseStatusExceptionResolver : Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
ย  | 2019-03-28 20:12:15.616 DEBUG 1 --- [ XNIO-2 task-4] .w.s.m.s.DefaultHandlerExceptionResolver : Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
ย  | 2019-03-28 20:12:15.616 WARN 1 --- [ XNIO-2 task-4] o.s.web.servlet.PageNotFound : Request method 'POST' not supported

ECDSA KeyFactory not available

When running containerproxy with Keycloak configured in application.yml and sending a request (/api/proxyspec), the following exception occurs:

2021-10-15 09:55:44.784 ERROR 63253 --- [  XNIO-1 task-1] io.undertow.request                      : UT005023: Exception handling request to /api/proxyspec

java.lang.RuntimeException: java.security.NoSuchAlgorithmException: ECDSA KeyFactory not available
	at org.keycloak.jose.jwk.JWKParser.createECPublicKey(JWKParser.java:114) ~[keycloak-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.jose.jwk.JWKParser.toPublicKey(JWKParser.java:78) ~[keycloak-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.util.JWKSUtils.getKeysForUse(JWKSUtils.java:41) ~[keycloak-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.rotation.JWKPublicKeyLocator.sendRequest(JWKPublicKeyLocator.java:101) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.rotation.JWKPublicKeyLocator.getPublicKey(JWKPublicKeyLocator.java:63) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.rotation.AdapterTokenVerifier.getPublicKey(AdapterTokenVerifier.java:121) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.rotation.AdapterTokenVerifier.createVerifier(AdapterTokenVerifier.java:111) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.rotation.AdapterTokenVerifier.verifyToken(AdapterTokenVerifier.java:47) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticateToken(BearerTokenRequestAuthenticator.java:103) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.BearerTokenRequestAuthenticator.authenticate(BearerTokenRequestAuthenticator.java:88) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.RequestAuthenticator.authenticate(RequestAuthenticator.java:68) ~[keycloak-adapter-core-4.7.0.Final.jar:4.7.0.Final]
	at org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter.attemptAuthentication(KeycloakAuthenticationProcessingFilter.java:149) ~[keycloak-spring-security-adapter-4.7.0.Final.jar:4.7.0.Final]
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter.doFilter(KeycloakPreAuthActionsFilter.java:86) ~[keycloak-spring-security-adapter-4.7.0.Final.jar:4.7.0.Final]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) ~[spring-security-web-5.3.4.RELEASE.jar:5.3.4.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.4.RELEASE.jar:2.3.4.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at eu.openanalytics.containerproxy.util.ProxyMappingManager$ProxyPathHandler.handleRequest(ProxyMappingManager.java:160) ~[classes/:na]
	at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) [undertow-servlet-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370) [undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:836) [undertow-core-2.1.4.Final.jar:2.1.4.Final]
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) [jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019) [jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558) [jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1423) [jboss-threads-3.1.0.Final.jar:3.1.0.Final]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_292]
Caused by: java.security.NoSuchAlgorithmException: ECDSA KeyFactory not available
	at java.security.KeyFactory.<init>(KeyFactory.java:138) ~[na:1.8.0_292]
	at java.security.KeyFactory.getInstance(KeyFactory.java:172) ~[na:1.8.0_292]
	at org.keycloak.jose.jwk.JWKParser.createECPublicKey(JWKParser.java:111) ~[keycloak-core-4.7.0.Final.jar:4.7.0.Final]
	... 80 common frames omitted

We found two workarounds:

  • Downgrade Keycloak from 4.7.0.Final to 4.6.0.Final in pom.xml
  • In ContainerProxyApplication.java insert the imports import org.bouncycastle.jce.provider.BouncyCastleProvider; and import java.security.Security; ; insert Security.addProvider(new BouncyCastleProvider()); directly below main-method.

Oauth2 not working in shinyproxy versions 2.5.0 and above

Hello ,

We are running shinyproxy apps on AWS EC2 instance.
We are able to run shinyproxy version 2.3.0 , 2.4.0 while using authentication method as oauth2.

Our oauth configuration in application.yml looks like:

oauth2:
    resource-id: https://<resource-id>
    jwks-url: https://api<jwks-url>/auth/serveJwks

When we update shinyproxy version from 2.3.0 to 2.5.0 after running commands

sudo wget downloadproxy
unlink shinyproxy.jar
ln -s shinyproxy-2.5.0.jar shinyproxy.jar
sudo service shinyproxy restart

we get the following error.

image

Field webSecurityConfigurerAdapter in eu.openanalytics.containerproxy.auth.impl.KeycloakAuthenticationBackend required a single bean, but 2 were found:
May 16 04:50:46 ip-172-31-73-41 java[28433]: - webSecurityConfig: defined in URL [jar:file:/opt/shinyproxy/shinyproxy-2.5.0.jar!/BOOT-INF/lib/containerproxy-0.8.8.j
May 16 04:50:46 ip-172-31-73-41 java[28433]: - org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfiguration: defined in null

Attaching our application.yml file

server:
  useForwardHeaders: true
proxy:

  title: <dashboard-title-here>
  logo-url: someurl
  landing-page: /
  heartbeat-rate: 10000
  heartbeat-timeout: 60000
  port: 8080
  authentication: simple
  admin-groups: someadmin
  oauth2:
    resource-id: https://<resource-id>
    jwks-url: https://api<jwks-url>/auth/serveJwks
  users:
  docker:
    cert-path: /home/none
    url: http://localhost:2375
    port-range-start: 20000
 
  specs:
    - id: default
      display-name: <app-name-here>
      description: <app-description-here>
      port: <port>
      container-image: <app-name-here>
      groups: someadmin , client
logging:
  file:
    shinyproxy.log

The same application.yaml file works for version shinyproxy version 2.3.0 and 2.4.0 but not for 2.5.0 and above. Could someone please help us ?

Can we please add support for oauth in shinyproxy versions 2.5.0 and above ?

Support for secrets in docker-swarm backend

Docker Swarm supports a secret store which is currently not supported by ShinyProxy. It's a best practice way to store sensitive information in a central place and make these available to containers/services as required.

It would be great to be able to define Docker secrets in the configuration.yml of ShinyProxy which will then be added to launched app services via the --secret argument.

For example:

proxy:
  specs:
    - id: example_app
      ...
      container-secrets:
       - my_secret

No support for OIDC JWT signed with ECDSA key.

Trying to use ShinyProxy with our own OpenID/OAuth2 Authenticator, which uses ECDSA keys to sign the JWT.
With vanilla containerproxy we get this errror when logging in:

2023-10-18 15:34:42.764 ERROR 1 --- [  XNIO-1 task-1] e.o.c.a.i.OpenIDAuthenticationBackend    : org.springframework.security.oauth2.core.OAuth2AuthenticationException: [invalid_id_token] An error occurred while attempting to decode the Jwt: Signed JWT rejected: Another algorithm expected, or no matching key(s) found

The problem seems to be solved by adding the following bean definition to eu.openanalytics.containerproxy.security.WebSecurityConfig:

  @Bean
  @ConditionalOnExpression ("'${proxy.authentication}' == 'openid'")
  public JwtDecoderFactory<ClientRegistration> oidcIdTokenDecoderFactory() {
    OidcIdTokenDecoderFactory factory = new OidcIdTokenDecoderFactory();
    SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.from(
      environment.getProperty("proxy.openid.jwks-signature-algorithm", "RS256"));
    factory.setJwsAlgorithmResolver(clientRegistration -> signatureAlgorithm);
    return factory;
  }

where jwks-signature-algorithm in our case is set to ES256 in the main application.yml file passed in to ShinyProxy.

Has anyone had the same problem before? Is there an easier way to solve it?

same-site-cookie not enforced

Hi,
I try to set SameSite cookies, but I have some issue.
I found:

proxy:
  same-site-cookie: none

I have it working because I see it in debug log:

2021-08-19 11:23:46.892 DEBUG 29 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'proxy.same-site-cookie' in PropertySource 'configurationProperties' with value of type String
2021-08-19 11:23:46.896 DEBUG 29 --- [           main] ication$$EnhancerBySpringCGLIB$$5eee0b1d : Setting sameSiteCookie policy to none

I tried also None and Strict
However, I still the same cookie, without SameSite.

$ curl https://xxx.com/login -v
...
Set-Cookie: JSESSIONID=.......; path=/; secure; HttpOnly

Do I misunderstand something about SameSite cookies?

Thanks,
Jakub

Support for OAuth2 refresh token

I'm running ShinyProxy on Kubernetes, integrated with a OAuth2/OpenID authorization server.
On login, the OIDC token is received by ShinyProxy and correctly passed down to the container as SHINYPROXY_OIDC_ACCESS_TOKEN environment variable. The Shiny app can then use the token to make API calls to a resource server, as specified in the documentation.

I was wondering, what happens when the token. expires? My tokens usually have short life (no more than 30 minutes). After that time, all API calls made by the Shiny app will start to fail.
Does ShinyProxy support refreshing the token inside the container/pod?

Java 8u252 compatibility

Java 8u252 has been released a few days ago and comes with support for cross-realm ticket delegation.

While testing (via ShinyProxy), obtaining service tickets failed silently. I found that this constructor does no longer exist:

sun.security.krb5.KrbTgsReq req = new sun.security.krb5.KrbTgsReq(
serviceTGTCreds,
sunTicket,
new sun.security.krb5.PrincipalName(backendServiceName));

The relevant commit is this, in jdk8u242:

https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/6e79bf791069#l9.16

Btw. it was kinda scary that no exception was thrown ๐Ÿ˜•

Cant compile with recent openjdk

Clean compile throws fail on krb :

[ERROR] /data/src/main/java/eu/openanalytics/containerproxy/auth/impl/kerberos/KRBUtils.java:[176,51] no suitable constructor found for KrbTgsReq(sun.security.krb5.Credentials,sun.security.krb5.internal.Ticket,sun.security.krb5.PrincipalName)
[ERROR]     constructor sun.security.krb5.KrbTgsReq.KrbTgsReq(sun.security.krb5.internal.KDCOptions,sun.security.krb5.Credentials,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.internal.Ticket[],sun.security.krb5.internal.PAData[]) is not applicable
[ERROR]       (actual and formal argument lists differ in length)
[ERROR]     constructor sun.security.krb5.KrbTgsReq.KrbTgsReq(sun.security.krb5.internal.KDCOptions,sun.security.krb5.Credentials,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.internal.KerberosTime,sun.security.krb5.internal.KerberosTime,sun.security.krb5.internal.KerberosTime,int[],sun.security.krb5.internal.HostAddresses,sun.security.krb5.internal.AuthorizationData,sun.security.krb5.internal.Ticket[],sun.security.krb5.EncryptionKey) is not applicable
[ERROR]       (actual and formal argument lists differ in length)
[ERROR]     constructor sun.security.krb5.KrbTgsReq.KrbTgsReq(sun.security.krb5.internal.KDCOptions,sun.security.krb5.Credentials,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.PrincipalName,sun.security.krb5.internal.KerberosTime,sun.security.krb5.internal.KerberosTime,sun.security.krb5.internal.KerberosTime,int[],sun.security.krb5.internal.HostAddresses,sun.security.krb5.internal.AuthorizationData,sun.security.krb5.internal.Ticket[],sun.security.krb5.EncryptionKey,sun.security.krb5.internal.PAData[]) is not applicable
[ERROR]       (actual and formal argument lists differ in length)
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

[SAML] timeout behind http proxy

Hi,

Would it be possible to implement the management of the http proxy on SAML calls, because we are running into a timeout on authentication with our AzureAD. Thank you.

Here the part of the logs

2021-02-04 09:51:05.250 DEBUG 1 --- [           main] o.s.s.saml.metadata.MetadataManager      : Created new trust manager for metadata provider org.opensaml.saml2.metadata.provider.HTTPMetadataProvider@397ef2
2021-02-04 09:51:05.250 DEBUG 1 --- [           main] o.s.s.saml.metadata.MetadataManager      : Adding signature filter
2021-02-04 09:51:05.250 DEBUG 1 --- [           main] o.s.s.saml.metadata.MetadataManager      : Initializing extendedMetadataDelegate org.opensaml.saml2.metadata.provider.HTTPMetadataProvider@397ef2
2021-02-04 09:51:05.250 DEBUG 1 --- [           main] o.s.s.s.m.ExtendedMetadataDelegate       : Initializing delegate
2021-02-04 09:51:05.287 DEBUG 1 --- [           main] .s.m.p.AbstractReloadingMetadataProvider : Beginning refresh of metadata from 'https://login.microsoftonline.com/aca3c8d6-aa71-4e1a-a10e-xxxxxxxxx/FederationMetadata/2007-06/FederationMetadata.xml'
2021-02-04 09:51:05.304 DEBUG 1 --- [           main] o.o.s.m.provider.HTTPMetadataProvider    : Attempting to fetch metadata document from 'https://login.microsoftonline.com/aca3c8d6-aa71-4e1a-a10e-xxxxxxxxx/FederationMetadata/2007-06/FederationMetadata.xml'
2021-02-04 09:51:05.310 DEBUG 1 --- [           main] o.a.commons.httpclient.HttpConnection    : Open connection to login.microsoftonline.com:443
...
2021-02-04 09:53:16.106 DEBUG 1 --- [           main] o.a.c.httpclient.HttpMethodDirector      : Closing the connection.
2021-02-04 09:53:16.106  INFO 1 --- [           main] o.a.c.httpclient.HttpMethodDirector      : I/O exception (java.net.ConnectException) caught when processing request: Connection timed out (Connection timed out)
2021-02-04 09:53:16.112 DEBUG 1 --- [           main] o.a.c.httpclient.HttpMethodDirector      : Connection timed out (Connection timed out)
java.net.ConnectException: Connection timed out (Connection timed out)
        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
        at java.base/java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) ~[na:na]
        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[na:na]
        at java.base/java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[na:na]
        at java.base/java.net.SocksSocketImpl.connect(Unknown Source) ~[na:na]
        at java.base/java.net.Socket.connect(Unknown Source) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.connect(Unknown Source) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketImpl.<init>(Unknown Source) ~[na:na]
        at java.base/sun.security.ssl.SSLSocketFactoryImpl.createSocket(Unknown Source) ~[na:na]
        at org.opensaml.ws.soap.client.http.TLSProtocolSocketFactory.createSocket(TLSProtocolSocketFactory.java:185) ~[openws-1.5.6.jar!/:na]
        at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) ~[commons-httpclient-3.1.jar!/:na]
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) ~[commons-httpclient-3.1.jar!/:na]
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) ~[commons-httpclient-3.1.jar!/:na]
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) ~[commons-httpclient-3.1.jar!/:na]
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) ~[commons-httpclient-3.1.jar!/:na]
        at org.opensaml.saml2.metadata.provider.HTTPMetadataProvider.fetchMetadata(HTTPMetadataProvider.java:250) ~[opensaml-2.6.6.jar!/:na]
        at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.refresh(AbstractReloadingMetadataProvider.java:258) ~[opensaml-2.6.6.jar!/:na]
        at org.opensaml.saml2.metadata.provider.AbstractReloadingMetadataProvider.doInitialization(AbstractReloadingMetadataProvider.java:239) ~[opensaml-2.6.6.jar!/:na]
        at org.opensaml.saml2.metadata.provider.AbstractMetadataProvider.initialize(AbstractMetadataProvider.java:407) ~[opensaml-2.6.6.jar!/:na]
        at org.springframework.security.saml.metadata.ExtendedMetadataDelegate.initialize(ExtendedMetadataDelegate.java:167) ~[spring-security-saml2-core-1.0.10.RELEASE.jar!/:1.0.10.RELEASE]

Note : we found this on spring security doc but no way apply it (https://docs.spring.io/spring-security-saml/docs/current/reference/html/configuration-advanced.html#artifact-resolution)

Thanks

Support request for Kubernetes PersistentVolumeClaims

Hello,

I looked at the code and it seems that containerproxy currently only supports kubernetes hostPath volumes.
Given that fabric8 seems to support PersistentVolumeClaims, I feel it might be a good idea to make containerproxy support them.
Indeed, hostPath volumes are not recommended in a production environnement (you never know on which host the pods are going to be running + the data mounted may be used by other applications) :
"In a production cluster, you would not use hostPath. Instead a cluster administrator would provision a network resource like a Google Compute Engine persistent disk, an NFS share, or an Amazon Elastic Block Store volume." (https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/)

Thank you.

Error when docker daemon is secured with HTTPS but container is not

I discovered this using ShinyProxy 2.3.0 with containerproxy 0.8.3

I am using docker engine, secured with TLS, so part of my config looks like:

docker:
  cert-path: /docker_certs
  url: https://localhost:2376

When running ShinyProxy with the example applications, after attempting to launch an application I find the following in the logs:

Container unresponsive, trying again (2/10): https://localhost:20000

Until eventually it gives up with an exception. The problem is that the 01_hello application is listening on HTTP not HTTPS.

The reason that ShinyProxy/containerproxy is attempting to use https to check the container is here:

targetProtocol = getProperty(PROPERTY_CONTAINER_PROTOCOL, hostURL.getProtocol());

In case the property identified as PROPERTY_CONTAINER_PROTOCOL is not defined, then the protocol of the docker daemon is used to build the URI for checking the container.

I was able to fix this by extending my config as follows:

docker:
  cert-path: /docker_certs
  url: https://localhost:2376
  container-protocol: http

(The container-protocol property corresponds to PROPERTY_CONTAINER_PROTOCOL). This appears to be an undocumented feature, at least I couldn't find any reference to it in the ShinyProxy or containerproxy documentation. I found it through reviewing the code.

Note that the behaviour is different when using the internal network option:

targetProtocol = getProperty(PROPERTY_CONTAINER_PROTOCOL, DEFAULT_TARGET_PROTOCOL);

In that case there is DEFAULT_TARGET_PROTOCOL which is "http".

I can see a few possible resolutions:

  • Update the documentation so it is clear that this setting may be needed when using a docker daemon with https.
  • Amend the code so when not using the internal network option the behaviour is the same as with the internal network option - use DEFAULT_TARGET_PROTOCOL when it is not set
  • Move this setting from a general docker property down into the specs configuration, so it can be set differently for different containers in the same proxy. At the moment it appears to me that it would not be possible to proxy and http and an https app at the same time.

I see two possible solutions.

transparent upgrades

It would be great if upgrading containerproxy/shinyproxy didn't destroy all running apps but instead adopted the running sessions of the previous instance.

Support multiple container in one pod for Kubernetes

Synopsis

We tried to patch pod template before launching, but since ContainerProxy only assumed Docker use cases, that is, configurations are based on one container (as the majority are using Docker backend instead), but in Kubernetes we have one pod associate with multiple containers. This causes major headaches in configurating container specifications.

Use cases

We wanted to provide add-on services to include prebaked services such as MySQL, Postgres, Oracle databases, and sometimes Docker-in-Docker, or run multiple concurrent services in one ShinyProxy instance. Due to the current limitation, we are forced to create combinations of Docker images that contained those services, and launch the services via a customized init system inside the container. This is very clumsy and unnecessary, and using multiple containers/sidecars are way more elegant.

Workaround

There are no currently well known workaround. Pod patches will supposedly work, but the proxy config parameters from ShinyProxy itself (such as container-env and container-cmd) will not be effective.

Extra reason to consider

This will also benefit users who are using Docker Swarm as ShinyProxy clustering solution, since they can also use the Docker Stack as an analogy to Kubernetes Pod, so there are two birds in one stone.

Proposed solution

Let the user specify multiple containers when they are using K8S/Docker Swarm backend, example:

proxy:
  specs:
    - containers:
	  - image: php:7.4
	  - image: mycourse/comp1234/mysql:preloaded
	  - image: nginx
	    name: nginx
	    env: [{PORT: "8080"}]
      description: Application to demostrate multiple containers
      display-name: Hello Application
      id: 01_app_stack
      port: 8080 # this will associate with container-front-facing from then on
      container-front-facing: nginx # then ContainerProxy will search for container where containers[*].name == "nginx"

If the container backend is Docker, then throw an UnsupportedOperationException, since there is no way to run multiple containers in Docker container, yet but strictly speaking, it is possible if you use Docker namespace, that is, create multiple networks and spawn the pods there, and then delete the containers inside the network when the ShinyProxy instance terminates.

Stop Using a Deprecated Docker Client

Currently the shiny proxy uses com.spotify:docker-client:jar:8.16.0 which is considered deprecated as of writing https://github.com/spotify/docker-client

Would it be possible to use its canonical replacement found here: https://github.com/docker-java/docker-java

The reason is that the spotify:docker-client has many issues associated with it in regards to the socket hanging when trying to listen for the response. It looks like it's a common problem with older versions of the spotify docker lib.

fabric8io/docker-maven-plugin#344
fabric8io/docker-maven-plugin#981
fabric8io/docker-maven-plugin#552
fabric8io/docker-maven-plugin#862

Some explanations in older issues for other projects indicate that it's related to an interaction between the native socket library, the system, and how it's being used (the spotify docker lib). In TCP HTTP the connection will close/once it has reached the end even if you try to read too much, but the domain socket will not.

Thanks in advance.

SAML Metadata visibility from SP side (shinyproxy)

For SAML authentication, the IdP wants to have a copy of the metadata from the SP side when adding the shinyproxy app.

For the SAML metadata that gets generated in shinyproxy/containerproxy, is it possible to query the shinyproxy (service provider) side for this? It seems .../saml/SOO/** and .../saml/login/** are open but there seems to be some probably intentional filtering going on so the "../saml/metadata" endpoint is not exposed (?).

Or is there some (other) way to get hold of the generated metadata from shinyproxy using "curl" for example? If this is not already available (operator error :)), please consider adding documentation or functionality to expose the .../saml/metadata for downloading (similar to what this link describes, I guess: https://docs.spring.io/spring-security-saml/docs/current/reference/html/configuration-metadata.html#configuration-metadata-sp-display).

This could be useful (unless it is already possible) when troubleshooting the contradictory "200 OK error" page that a few of us shinproxy w SAML users are running into, see for example here: https://support.openanalytics.eu/t/saml-issue-status-code-200/1529. There is also a redirect loop that can occur sometimes that would also benefit from being able to download the IP metadata to double-check that it is correct.

OIDC: Userinfo not consulted when looking for roles claim

Hello! I'd like to report an issue related to OpenID Connect (OIDC) and the roles-claim: Shinyproxy does not support parsing a roles claim from OIDC userinfo.

I am configuring a new ShinyProxy installation, using OpenID Connect. The IdP is running Shibboleth. (Shibboleth has been known for a long time as a SAML IdP; since version 3.x, Shibboleth has supported OIDC as an IdP.) ShinyProxy is configured with Auth/Token/Userinfo/JWKS URls, and PKCE is enabled.

In my case, the roles information is contained in an OIDC claim named eduPersonEntitlement, and to get this claim, I need to request the scope eduperson_entitlement. I have confirmed that ShinyProxy is properly requesting this scope from the IdP (I can see it when I look at the HTTP requests using Firefox dev tools). I have talked to the Shibboleth admins, and they confirmed I am making the request properly, and that the eduPersonEntitlement claim is being provided.

I turned on auth debugging, so I could see the claims that were being examined, but I still did not see my eduPersonEntitlement claim. I also noticed that some other claims were not being provided. I started to wonder if the userinfo endpoint was not being checked.

Eventually, I found createAuthoritiesMapper in eu.openanalytics.containerproxy.auth.OpenIDAuthenticationBackend:

protected GrantedAuthoritiesMapper createAuthoritiesMapper() {
String rolesClaimName = environment.getProperty("proxy.openid.roles-claim");
if (rolesClaimName == null || rolesClaimName.isEmpty()) {
return authorities -> authorities;
} else {
return authorities -> {
Set<GrantedAuthority> mappedAuthorities = new HashSet<>();
for (GrantedAuthority auth: authorities) {
if (auth instanceof OidcUserAuthority) {
OidcIdToken idToken = ((OidcUserAuthority) auth).getIdToken();
if (log.isDebugEnabled()) {
String lineSep = System.getProperty("line.separator");
String claims = idToken.getClaims().entrySet().stream()
.map(e -> String.format("%s -> %s", e.getKey(), e.getValue()))
.collect(Collectors.joining(lineSep));
log.debug(String.format("Checking for roles in claim '%s'. Available claims in ID token (%d):%s%s",
rolesClaimName, idToken.getClaims().size(), lineSep, claims));
}
Object claimValue = idToken.getClaims().get(rolesClaimName);
for (String role: parseRolesClaim(log, rolesClaimName, claimValue)) {
String mappedRole = role.toUpperCase().startsWith("ROLE_") ? role : "ROLE_" + role;
mappedAuthorities.add(new SimpleGrantedAuthority(mappedRole.toUpperCase()));
}
}
}
return mappedAuthorities;
};
}
}

I see the code is looking at the ID Token (on line 218), but it doesn't look like the userinfo is being checked. So, I think that is the problem: When looking for the roles, only the ID Token is being checked, not the userinfo.

Although I was able to find (what I think is) the issue, I do not have the Java skills necessary to patch, build, or test.

Please let me know if you have any questions, or if I put this report in the wrong place. Thanks very much!

Feature Request: Kubernetes & Istio Compatibility

After quite a lot of debugging of Shinyproxy on a K8s + Istio cluster it looks like Shinyproxy itself runs fine, and can launch pods without the kube-sidecar proxy (kubernetes.url: [IP of kubernetes.default.svc.cluster.local] , but it fails to communicate with the child pods since Containerproxy uses either pod IP (for internal networking) or hostIP+servicePort for external networking. Istio mostly requires services.

I've tried a few options, and a quick and dirty workaround could be to define a separate (non-injected) namespace for the child pods, create a ServiceEntry for spec.hosts childnamespace.svc.cluster.local, resolution: DNS, and have an option which acts similarly to internal-networking=false, but uses the service IP address & port, not the host.

To allow full functionality of istio, it'd be preferable to allow an 'istio' option, which would cause pods to be addressed by created services, even when internal-networking is true. I'm certain I don't have the Java skills to submit this request, but I'll give it a go at this end, even if only to help those with real skill get on the right path.

Stuart

[FR] Display container logs when "Container did not respond in time"

"Container did not respond in time" is due to the docker container fails to launch shiny apps. However, the log of the docker is not included in the error message. Moreover, after the failure, the container is removed automatically.

Although we can launch a container by ourselves and see what happens really there, a better way I think is to attach the container log (a.k.a the log returned from docker log $container-name) in the error page by default.

Thanks.

containerproxy.service.UserService.java.isAdmin doesn't handle string arrays

This code doesn't handle the case where getAdminGroups returns a string array (even with only a single element)

public boolean isAdmin(Authentication auth) {
for (String adminGroups: getAdminGroups()) {
if (isMember(auth, adminGroups)) return true;
}
return false;
}

because isMember is defined as:
private boolean isMember(Authentication auth, String groupName) {

As a consequence shinyproxy fails to assign admin roles when the admin-groups is an array.

S4U2self ticket must be FORWARDABLE

I'm aware that it's probably a configuration issue on my side but in my desperation, I'm taking the freedom to ask you guys. Please forgive me :-)

Even though the log says:

DEBUG: Config isForwardable = true
DEBUG: KDCOptions isForwardable = true
DEBUG: TGT (KerberosTicket) isForwardable = true
DEBUG: TGT (Credentials) isForwardable = true
DEBUG: Requesting impersonation ticket (S4U2self) for user myuser@MYREALM

I'm getting:

2020-04-21 14:24:53.159 ERROR 1 --- [pool-3-thread-1] e.o.c.a.i.k.KRBTicketRenewalManager      : Error while renewing service tickets for myuser@MYREALM

sun.security.krb5.KrbException: S4U2self ticket must be FORWARDABLE
 at sun.security.krb5.internal.CredentialsUtil.acquireS4U2selfCreds(CredentialsUtil.java:105) ~[na:1.8.0_252]
 at sun.security.krb5.Credentials.acquireS4U2selfCreds(Credentials.java:495) ~[na:1.8.0_252]
 at eu.openanalytics.containerproxy.auth.impl.kerberos.KRBUtils.obtainImpersonationTicket(KRBUtils.java:144) ~[containerproxy-0.8.3.jar!/:0.8.3]
 at eu.openanalytics.containerproxy.auth.impl.kerberos.KRBTicketRenewalManager$RenewalJob.run(KRBTicketRenewalManager.java:102) ~[containerproxy-0.8.3.jar!/:0.8.3]
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_252]
 at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_252]
 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_252]
 at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_252]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_252]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_252]
 at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252]

(TODO: post screenshot of delegation configuration)

The Flag TRUSTED_TO_AUTH_FOR_DELEGATION is set on the Service Account.

Do you know what needs to be configured to get a forwardable S4U2self ticket?

Full post is here: https://stackoverflow.com/questions/61347160/kerberos-s4u2self-ticket-must-be-forwardable-containerproxy

HTTP 500 internal server error when using access token

We are using shinyproxy with Keycloak as authentication. Accessing the REST-endpoints of shinyproxy/containerproxy from the browser works just fine. As far as I understand, shinyproxy recognizes the user by the jsessionid-token, set in the browser after the successful keycloak login (redirecting back to shinyproxy).
It would be lovely, to be able to access containerproxy endpoints via access tokens. For example from curl, postman or a backend application (Java/Spring Boot). However, doing so results in a nullpointer-exception:

eu.openanalytics.containerproxy.auth.impl.KeycloakAuthenticationBackend$KeycloakAuthenticationToken2.getName(KeycloakAuthenticationBackend.java:237)

If proxy.keycloak.name-attribute: preferred_username is set in application.yml:

eu.openanalytics.containerproxy.auth.impl.KeycloakAuthenticationBackend$KeycloakAuthenticationToken2.getName(KeycloakAuthenticationBackend.java:234)

The Problem is that getAccount().getKeycloakSecurityContext().getIdToken() returns null (KeycloakAuthenticationBackend.java:232).

I inspected the token to check that preferred_username is set and shinyproxy is also able to verify it. When commenting out the getName() method in KeycloakAuthenticationBackend.java, which caused the exception, using access tokens works:

	private static class KeycloakAuthenticationToken2 extends KeycloakAuthenticationToken implements Serializable {
		
		private static final long serialVersionUID = -521347733024996150L;

		private String nameAttribute;
		
		public KeycloakAuthenticationToken2(KeycloakAccount account, boolean interactive, String nameAttribute, Collection<? extends GrantedAuthority> authorities) {
			super(account, interactive, authorities);
			this.nameAttribute = nameAttribute;
		}

/*
		@Override
		public String getName() {
			IDToken token = getAccount().getKeycloakSecurityContext().getIdToken(); System.out.println("IDToken: " + token);
			switch (nameAttribute) {
			case IDToken.PREFERRED_USERNAME: return token.getPreferredUsername();
			case IDToken.NICKNAME: return token.getNickName();
			case IDToken.EMAIL: return token.getEmail();
			default: return token.getName();
			}
		}
*/
	}

Towards the middle of KeycloakAuthenticationBackend.java, there are comments, saying:

	@Bean
	@ConditionalOnProperty(name="proxy.authentication", havingValue="keycloak")
	protected KeycloakAuthenticationProcessingFilter keycloakAuthenticationProcessingFilter() throws Exception {
		// Possible solution for issue #21037, create a custom RequestMatcher that doesn't include a QueryParamPresenceRequestMatcher(OAuth2Constants.ACCESS_TOKEN) request matcher.
		// The QueryParamPresenceRequestMatcher(OAuth2Constants.ACCESS_TOKEN) caused the HTTP requests to be changed before they where processed.
		// Because the HTTP requests are adapted before they are processed, the requested failed to complete successfully and caused an io.undertow.server.TruncatedResponseException
		// If in the future we need a RequestMatcher for het ACCESS_TOKEN, we can implement one ourself
		RequestMatcher requestMatcher =
				new OrRequestMatcher(
	                    new AntPathRequestMatcher(KeycloakAuthenticationProcessingFilter.DEFAULT_LOGIN_URL),
	                    new RequestHeaderRequestMatcher(KeycloakAuthenticationProcessingFilter.AUTHORIZATION_HEADER)
	            );

		KeycloakAuthenticationProcessingFilter filter = new KeycloakAuthenticationProcessingFilter(authenticationManager, requestMatcher);
		filter.setSessionAuthenticationStrategy(sessionAuthenticationStrategy());
		// Fix: call afterPropertiesSet manually, because Spring doesn't invoke it for some reason.
		filter.setApplicationContext(ctx);
		filter.afterPropertiesSet();
		return filter;
	}

So perhaps the solution is as easy as implementing the mentioned RequestMatcher for access tokens. I would prefer to not modify the code of containerproxy (i.e. commenting out KeycloakAuthenticationToken2.getName()). Unfortunately my understanding of Spring Security, Keycloak and containerproxy's code is insufficient to come up with a correct solution and a pull request. Any insight into the problem is appreciated.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.