Uploaded image for project: 'Undertow'
  1. Undertow
  2. UNDERTOW-2712

The deprecated getRequestCookies() and getResponseCookies() need to return a valid map

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Blocker Blocker
    • 2.4.0.Final, 2.4.0.Beta2
    • None
    • Core
    • None

      In UNDERTOW-2194 the HttpServerExchange.getRequestCookies() and HttpServerExchange.getResponseCookies() were changed to return a map, MapDelegatingToMultiValueStorage, which doesn't properly implement the Map interface. Specifically, Map.values(), Map.entrySet(), and other collection methods throw UnsupportedOperationException. Example stack trace:

      14:59:56,083 ERROR [io.undertow.request] (default task-2) UT005023: Exception handling request to /SSOFormReAuthenticationTestCase-login-app/restricted/SecuredServlet: java.lang.UnsupportedOperationException
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.MapDelegatingToMultiValueStorage.values(MapDelegatingToMultiValueStorage.java:92)
          at org.wildfly.security.elytron-web.undertow-server@4.1.2.Final//org.wildfly.elytron.web.undertow.server.ElytronHttpExchange.getCookies(ElytronHttpExchange.java:301)
          at org.wildfly.security.elytron-base@2.8.3.Final//org.wildfly.security.http.util.sso.ProgrammaticSingleSignOnCache.getCookie(ProgrammaticSingleSignOnCache.java:144)
          at org.wildfly.security.elytron-base@2.8.3.Final//org.wildfly.security.http.util.sso.ProgrammaticSingleSignOnCache.getSSOSessionId(ProgrammaticSingleSignOnCache.java:121)
          at org.wildfly.security.elytron-base@2.8.3.Final//org.wildfly.security.http.util.sso.ProgrammaticSingleSignOnCache.getSingleSignOnSession(ProgrammaticSingleSignOnCache.java:129)
          at org.wildfly.security.elytron-base@2.8.3.Final//org.wildfly.security.http.util.sso.ProgrammaticSingleSignOnCache.get(ProgrammaticSingleSignOnCache.java:64)
          at org.wildfly.security.elytron-base@2.8.3.Final//org.wildfly.security.http.HttpAuthenticator.restoreIdentity(HttpAuthenticator.java:174)
          at org.wildfly.security.elytron-base@2.8.3.Final//org.wildfly.security.http.HttpAuthenticator.authenticate(HttpAuthenticator.java:89)
          at org.wildfly.security.elytron-web.undertow-server@4.1.2.Final//org.wildfly.elytron.web.undertow.server.SecurityContextImpl.authenticate(SecurityContextImpl.java:107)
          at org.wildfly.security.elytron-web.undertow-server-servlet@4.1.2.Final//org.wildfly.elytron.web.undertow.server.servlet.ServletSecurityContextImpl.authenticate(ServletSecurityContextImpl.java:117)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:55)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
          at io.undertow.core@2.4.0.Beta1//io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
          at io.undertow.core@2.4.0.Beta1//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:60)
          at io.undertow.core@2.4.0.Beta1//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
          at org.wildfly.security.elytron-web.undertow-server-servlet@4.1.2.Final//org.wildfly.elytron.web.undertow.server.servlet.CleanUpHandler.handleRequest(CleanUpHandler.java:38)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.deployment.ControlPointDeploymentInfoConfigurator$ControlPointRequestAttributeHandler.handleRequest(ControlPointDeploymentInfoConfigurator.java:175)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:44)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:271)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:130)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.ServletInitialHandler$1.call(ServletInitialHandler.java:127)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.deployment.ControlPointDeploymentInfoConfigurator$1.call(ControlPointDeploymentInfoConfigurator.java:100)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1427)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1427)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1427)
          at org.wildfly.extension.undertow@40.0.0.Beta1-SNAPSHOT//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1427)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:251)
          at io.undertow.servlet@1.0.0.Beta1//io.undertow.servlet.handlers.ServletInitialHandler.lambda$new$1(ServletInitialHandler.java:99)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.Connectors.executeRootHandler(Connectors.java:417)
          at io.undertow.core@2.4.0.Beta1//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:942)
          at org.jboss.threads@3.9.2//org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
          at org.jboss.threads@3.9.2//org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
          at org.jboss.threads@3.9.2//org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
          at org.jboss.threads@3.9.2//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1586)
          at org.jboss.xnio@3.8.16.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
          at java.base/java.lang.Thread.run(Thread.java:1474)
      

      The issue is, while deprecated, this is a public API and other components rely on it as shown above. We must allow a real map to be returned and function as expected.

              jperkins-rhn James Perkins
              jperkins-rhn James Perkins
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: