Search in sources :

Example 1 with SessionTrackingMode

use of jakarta.servlet.SessionTrackingMode in project spring-security by spring-projects.

the class AbstractSecurityWebApplicationInitializerTests method onStartupWhenSessionTrackingModesConfiguredThenUsed.

@Test
public void onStartupWhenSessionTrackingModesConfiguredThenUsed() {
    ServletContext context = mock(ServletContext.class);
    FilterRegistration.Dynamic registration = mock(FilterRegistration.Dynamic.class);
    ArgumentCaptor<DelegatingFilterProxy> proxyCaptor = ArgumentCaptor.forClass(DelegatingFilterProxy.class);
    given(context.addFilter(eq("springSecurityFilterChain"), proxyCaptor.capture())).willReturn(registration);
    ArgumentCaptor<Set<SessionTrackingMode>> modesCaptor = ArgumentCaptor.forClass(new HashSet<SessionTrackingMode>() {
    }.getClass());
    willDoNothing().given(context).setSessionTrackingModes(modesCaptor.capture());
    new AbstractSecurityWebApplicationInitializer() {

        @Override
        public Set<SessionTrackingMode> getSessionTrackingModes() {
            return Collections.singleton(SessionTrackingMode.SSL);
        }
    }.onStartup(context);
    assertProxyDefaults(proxyCaptor.getValue());
    Set<SessionTrackingMode> modes = modesCaptor.getValue();
    assertThat(modes).hasSize(1);
    assertThat(modes).containsExactly(SessionTrackingMode.SSL);
}
Also used : HashSet(java.util.HashSet) EnumSet(java.util.EnumSet) Set(java.util.Set) SessionTrackingMode(jakarta.servlet.SessionTrackingMode) ServletContext(jakarta.servlet.ServletContext) FilterRegistration(jakarta.servlet.FilterRegistration) DelegatingFilterProxy(org.springframework.web.filter.DelegatingFilterProxy) HashSet(java.util.HashSet) Test(org.junit.jupiter.api.Test)

Example 2 with SessionTrackingMode

use of jakarta.servlet.SessionTrackingMode in project tomcat by apache.

the class WebXml method toXml.

/**
 * Generate a web.xml in String form that matches the representation stored
 * in this object.
 *
 * @return The complete contents of web.xml as a String
 */
public String toXml() {
    StringBuilder sb = new StringBuilder(2048);
    // TODO - Various, icon, description etc elements are skipped - mainly
    // because they are ignored when web.xml is parsed - see above
    // NOTE - Elements need to be written in the order defined in the 2.3
    // DTD else validation of the merged web.xml will fail
    // NOTE - Some elements need to be skipped based on the version of the
    // specification being used. Version is validated and starts at
    // 2.2. The version tests used in this method take advantage of
    // this.
    // Declaration
    sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    // Root element
    if (publicId != null) {
        sb.append("<!DOCTYPE web-app PUBLIC\n");
        sb.append("  \"");
        sb.append(publicId);
        sb.append("\"\n");
        sb.append("  \"");
        if (XmlIdentifiers.WEB_22_PUBLIC.equals(publicId)) {
            sb.append(XmlIdentifiers.WEB_22_SYSTEM);
        } else {
            sb.append(XmlIdentifiers.WEB_23_SYSTEM);
        }
        sb.append("\">\n");
        sb.append("<web-app>");
    } else {
        String javaeeNamespace = null;
        String webXmlSchemaLocation = null;
        String version = getVersion();
        if ("2.4".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAVAEE_1_4_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_24_XSD;
        } else if ("2.5".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAVAEE_5_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_25_XSD;
        } else if ("3.0".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAVAEE_6_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_30_XSD;
        } else if ("3.1".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAVAEE_7_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_31_XSD;
        } else if ("4.0".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAVAEE_8_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_40_XSD;
        } else if ("5.0".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAKARTAEE_9_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_50_XSD;
        } else if ("6.0".equals(version)) {
            javaeeNamespace = XmlIdentifiers.JAKARTAEE_10_NS;
            webXmlSchemaLocation = XmlIdentifiers.WEB_60_XSD;
        }
        sb.append("<web-app xmlns=\"");
        sb.append(javaeeNamespace);
        sb.append("\"\n");
        sb.append("         xmlns:xsi=");
        sb.append("\"http://www.w3.org/2001/XMLSchema-instance\"\n");
        sb.append("         xsi:schemaLocation=\"");
        sb.append(javaeeNamespace);
        sb.append(' ');
        sb.append(webXmlSchemaLocation);
        sb.append("\"\n");
        sb.append("         version=\"");
        sb.append(getVersion());
        sb.append("\"");
        if ("2.4".equals(version)) {
            sb.append(">\n\n");
        } else {
            sb.append("\n         metadata-complete=\"true\">\n\n");
        }
    }
    appendElement(sb, INDENT2, "display-name", displayName);
    if (isDistributable()) {
        sb.append("  <distributable/>\n\n");
    }
    for (Map.Entry<String, String> entry : contextParams.entrySet()) {
        sb.append("  <context-param>\n");
        appendElement(sb, INDENT4, "param-name", entry.getKey());
        appendElement(sb, INDENT4, "param-value", entry.getValue());
        sb.append("  </context-param>\n");
    }
    sb.append('\n');
    // Filters were introduced in Servlet 2.3
    if (getMajorVersion() > 2 || getMinorVersion() > 2) {
        for (Map.Entry<String, FilterDef> entry : filters.entrySet()) {
            FilterDef filterDef = entry.getValue();
            sb.append("  <filter>\n");
            appendElement(sb, INDENT4, "description", filterDef.getDescription());
            appendElement(sb, INDENT4, "display-name", filterDef.getDisplayName());
            appendElement(sb, INDENT4, "filter-name", filterDef.getFilterName());
            appendElement(sb, INDENT4, "filter-class", filterDef.getFilterClass());
            // Async support was introduced for Servlet 3.0 onwards
            if (getMajorVersion() != 2) {
                appendElement(sb, INDENT4, "async-supported", filterDef.getAsyncSupported());
            }
            for (Map.Entry<String, String> param : filterDef.getParameterMap().entrySet()) {
                sb.append("    <init-param>\n");
                appendElement(sb, INDENT6, "param-name", param.getKey());
                appendElement(sb, INDENT6, "param-value", param.getValue());
                sb.append("    </init-param>\n");
            }
            sb.append("  </filter>\n");
        }
        sb.append('\n');
        for (FilterMap filterMap : filterMaps) {
            sb.append("  <filter-mapping>\n");
            appendElement(sb, INDENT4, "filter-name", filterMap.getFilterName());
            if (filterMap.getMatchAllServletNames()) {
                sb.append("    <servlet-name>*</servlet-name>\n");
            } else {
                for (String servletName : filterMap.getServletNames()) {
                    appendElement(sb, INDENT4, "servlet-name", servletName);
                }
            }
            if (filterMap.getMatchAllUrlPatterns()) {
                sb.append("    <url-pattern>*</url-pattern>\n");
            } else {
                for (String urlPattern : filterMap.getURLPatterns()) {
                    appendElement(sb, INDENT4, "url-pattern", encodeUrl(urlPattern));
                }
            }
            // dispatcher was added in Servlet 2.4
            if (getMajorVersion() > 2 || getMinorVersion() > 3) {
                for (String dispatcher : filterMap.getDispatcherNames()) {
                    if (getMajorVersion() == 2 && DispatcherType.ASYNC.name().equals(dispatcher)) {
                        continue;
                    }
                    appendElement(sb, INDENT4, "dispatcher", dispatcher);
                }
            }
            sb.append("  </filter-mapping>\n");
        }
        sb.append('\n');
    }
    // Listeners were introduced in Servlet 2.3
    if (getMajorVersion() > 2 || getMinorVersion() > 2) {
        for (String listener : listeners) {
            sb.append("  <listener>\n");
            appendElement(sb, INDENT4, "listener-class", listener);
            sb.append("  </listener>\n");
        }
        sb.append('\n');
    }
    for (Map.Entry<String, ServletDef> entry : servlets.entrySet()) {
        ServletDef servletDef = entry.getValue();
        sb.append("  <servlet>\n");
        appendElement(sb, INDENT4, "description", servletDef.getDescription());
        appendElement(sb, INDENT4, "display-name", servletDef.getDisplayName());
        appendElement(sb, INDENT4, "servlet-name", entry.getKey());
        appendElement(sb, INDENT4, "servlet-class", servletDef.getServletClass());
        appendElement(sb, INDENT4, "jsp-file", servletDef.getJspFile());
        for (Map.Entry<String, String> param : servletDef.getParameterMap().entrySet()) {
            sb.append("    <init-param>\n");
            appendElement(sb, INDENT6, "param-name", param.getKey());
            appendElement(sb, INDENT6, "param-value", param.getValue());
            sb.append("    </init-param>\n");
        }
        appendElement(sb, INDENT4, "load-on-startup", servletDef.getLoadOnStartup());
        appendElement(sb, INDENT4, "enabled", servletDef.getEnabled());
        // Async support was introduced for Servlet 3.0 onwards
        if (getMajorVersion() != 2) {
            appendElement(sb, INDENT4, "async-supported", servletDef.getAsyncSupported());
        }
        // servlet/run-as was introduced in Servlet 2.3
        if (getMajorVersion() > 2 || getMinorVersion() > 2) {
            if (servletDef.getRunAs() != null) {
                sb.append("    <run-as>\n");
                appendElement(sb, INDENT6, "role-name", servletDef.getRunAs());
                sb.append("    </run-as>\n");
            }
        }
        for (SecurityRoleRef roleRef : servletDef.getSecurityRoleRefs()) {
            sb.append("    <security-role-ref>\n");
            appendElement(sb, INDENT6, "role-name", roleRef.getName());
            appendElement(sb, INDENT6, "role-link", roleRef.getLink());
            sb.append("    </security-role-ref>\n");
        }
        // multipart-config was added in Servlet 3.0
        if (getMajorVersion() != 2) {
            MultipartDef multipartDef = servletDef.getMultipartDef();
            if (multipartDef != null) {
                sb.append("    <multipart-config>\n");
                appendElement(sb, INDENT6, "location", multipartDef.getLocation());
                appendElement(sb, INDENT6, "max-file-size", multipartDef.getMaxFileSize());
                appendElement(sb, INDENT6, "max-request-size", multipartDef.getMaxRequestSize());
                appendElement(sb, INDENT6, "file-size-threshold", multipartDef.getFileSizeThreshold());
                sb.append("    </multipart-config>\n");
            }
        }
        sb.append("  </servlet>\n");
    }
    sb.append('\n');
    for (Map.Entry<String, String> entry : servletMappings.entrySet()) {
        sb.append("  <servlet-mapping>\n");
        appendElement(sb, INDENT4, "servlet-name", entry.getValue());
        appendElement(sb, INDENT4, "url-pattern", encodeUrl(entry.getKey()));
        sb.append("  </servlet-mapping>\n");
    }
    sb.append('\n');
    if (sessionConfig != null) {
        sb.append("  <session-config>\n");
        appendElement(sb, INDENT4, "session-timeout", sessionConfig.getSessionTimeout());
        if (majorVersion >= 3) {
            sb.append("    <cookie-config>\n");
            appendElement(sb, INDENT6, "name", sessionConfig.getCookieName());
            appendElement(sb, INDENT6, "domain", sessionConfig.getCookieDomain());
            appendElement(sb, INDENT6, "path", sessionConfig.getCookiePath());
            appendElement(sb, INDENT6, "comment", sessionConfig.getCookieComment());
            appendElement(sb, INDENT6, "http-only", sessionConfig.getCookieHttpOnly());
            appendElement(sb, INDENT6, "secure", sessionConfig.getCookieSecure());
            appendElement(sb, INDENT6, "max-age", sessionConfig.getCookieMaxAge());
            sb.append("    </cookie-config>\n");
            for (SessionTrackingMode stm : sessionConfig.getSessionTrackingModes()) {
                appendElement(sb, INDENT4, "tracking-mode", stm.name());
            }
        }
        sb.append("  </session-config>\n\n");
    }
    for (Map.Entry<String, String> entry : mimeMappings.entrySet()) {
        sb.append("  <mime-mapping>\n");
        appendElement(sb, INDENT4, "extension", entry.getKey());
        appendElement(sb, INDENT4, "mime-type", entry.getValue());
        sb.append("  </mime-mapping>\n");
    }
    sb.append('\n');
    if (welcomeFiles.size() > 0) {
        sb.append("  <welcome-file-list>\n");
        for (String welcomeFile : welcomeFiles) {
            appendElement(sb, INDENT4, "welcome-file", welcomeFile);
        }
        sb.append("  </welcome-file-list>\n\n");
    }
    for (ErrorPage errorPage : errorPages.values()) {
        String exceptionType = errorPage.getExceptionType();
        int errorCode = errorPage.getErrorCode();
        if (exceptionType == null && errorCode == 0 && getMajorVersion() == 2) {
            // Default error pages are only supported from 3.0 onwards
            continue;
        }
        sb.append("  <error-page>\n");
        if (errorPage.getExceptionType() != null) {
            appendElement(sb, INDENT4, "exception-type", exceptionType);
        } else if (errorPage.getErrorCode() > 0) {
            appendElement(sb, INDENT4, "error-code", Integer.toString(errorCode));
        }
        appendElement(sb, INDENT4, "location", errorPage.getLocation());
        sb.append("  </error-page>\n");
    }
    sb.append('\n');
    // directly and jsp-property-group did not exist
    if (taglibs.size() > 0 || jspPropertyGroups.size() > 0) {
        if (getMajorVersion() > 2 || getMinorVersion() > 3) {
            sb.append("  <jsp-config>\n");
        }
        for (Map.Entry<String, String> entry : taglibs.entrySet()) {
            sb.append("    <taglib>\n");
            appendElement(sb, INDENT6, "taglib-uri", entry.getKey());
            appendElement(sb, INDENT6, "taglib-location", entry.getValue());
            sb.append("    </taglib>\n");
        }
        if (getMajorVersion() > 2 || getMinorVersion() > 3) {
            for (JspPropertyGroup jpg : jspPropertyGroups) {
                sb.append("    <jsp-property-group>\n");
                for (String urlPattern : jpg.getUrlPatterns()) {
                    appendElement(sb, INDENT6, "url-pattern", encodeUrl(urlPattern));
                }
                appendElement(sb, INDENT6, "el-ignored", jpg.getElIgnored());
                appendElement(sb, INDENT6, "page-encoding", jpg.getPageEncoding());
                appendElement(sb, INDENT6, "scripting-invalid", jpg.getScriptingInvalid());
                appendElement(sb, INDENT6, "is-xml", jpg.getIsXml());
                for (String prelude : jpg.getIncludePreludes()) {
                    appendElement(sb, INDENT6, "include-prelude", prelude);
                }
                for (String coda : jpg.getIncludeCodas()) {
                    appendElement(sb, INDENT6, "include-coda", coda);
                }
                appendElement(sb, INDENT6, "deferred-syntax-allowed-as-literal", jpg.getDeferredSyntax());
                appendElement(sb, INDENT6, "trim-directive-whitespaces", jpg.getTrimWhitespace());
                appendElement(sb, INDENT6, "default-content-type", jpg.getDefaultContentType());
                appendElement(sb, INDENT6, "buffer", jpg.getBuffer());
                appendElement(sb, INDENT6, "error-on-undeclared-namespace", jpg.getErrorOnUndeclaredNamespace());
                sb.append("    </jsp-property-group>\n");
            }
            sb.append("  </jsp-config>\n\n");
        }
    }
    // resource-env-ref was introduced in Servlet 2.3
    if (getMajorVersion() > 2 || getMinorVersion() > 2) {
        for (ContextResourceEnvRef resourceEnvRef : resourceEnvRefs.values()) {
            sb.append("  <resource-env-ref>\n");
            appendElement(sb, INDENT4, "description", resourceEnvRef.getDescription());
            appendElement(sb, INDENT4, "resource-env-ref-name", resourceEnvRef.getName());
            appendElement(sb, INDENT4, "resource-env-ref-type", resourceEnvRef.getType());
            appendElement(sb, INDENT4, "mapped-name", resourceEnvRef.getProperty("mappedName"));
            for (InjectionTarget target : resourceEnvRef.getInjectionTargets()) {
                sb.append("    <injection-target>\n");
                appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
                appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
                sb.append("    </injection-target>\n");
            }
            appendElement(sb, INDENT4, "lookup-name", resourceEnvRef.getLookupName());
            sb.append("  </resource-env-ref>\n");
        }
        sb.append('\n');
    }
    for (ContextResource resourceRef : resourceRefs.values()) {
        sb.append("  <resource-ref>\n");
        appendElement(sb, INDENT4, "description", resourceRef.getDescription());
        appendElement(sb, INDENT4, "res-ref-name", resourceRef.getName());
        appendElement(sb, INDENT4, "res-type", resourceRef.getType());
        appendElement(sb, INDENT4, "res-auth", resourceRef.getAuth());
        // resource-ref/res-sharing-scope was introduced in Servlet 2.3
        if (getMajorVersion() > 2 || getMinorVersion() > 2) {
            appendElement(sb, INDENT4, "res-sharing-scope", resourceRef.getScope());
        }
        appendElement(sb, INDENT4, "mapped-name", resourceRef.getProperty("mappedName"));
        for (InjectionTarget target : resourceRef.getInjectionTargets()) {
            sb.append("    <injection-target>\n");
            appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
            appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
            sb.append("    </injection-target>\n");
        }
        appendElement(sb, INDENT4, "lookup-name", resourceRef.getLookupName());
        sb.append("  </resource-ref>\n");
    }
    sb.append('\n');
    for (SecurityConstraint constraint : securityConstraints) {
        sb.append("  <security-constraint>\n");
        // security-constraint/display-name was introduced in Servlet 2.3
        if (getMajorVersion() > 2 || getMinorVersion() > 2) {
            appendElement(sb, INDENT4, "display-name", constraint.getDisplayName());
        }
        for (SecurityCollection collection : constraint.findCollections()) {
            sb.append("    <web-resource-collection>\n");
            appendElement(sb, INDENT6, "web-resource-name", collection.getName());
            appendElement(sb, INDENT6, "description", collection.getDescription());
            for (String urlPattern : collection.findPatterns()) {
                appendElement(sb, INDENT6, "url-pattern", encodeUrl(urlPattern));
            }
            for (String method : collection.findMethods()) {
                appendElement(sb, INDENT6, "http-method", method);
            }
            for (String method : collection.findOmittedMethods()) {
                appendElement(sb, INDENT6, "http-method-omission", method);
            }
            sb.append("    </web-resource-collection>\n");
        }
        if (constraint.findAuthRoles().length > 0) {
            sb.append("    <auth-constraint>\n");
            for (String role : constraint.findAuthRoles()) {
                appendElement(sb, INDENT6, "role-name", role);
            }
            sb.append("    </auth-constraint>\n");
        }
        if (constraint.getUserConstraint() != null) {
            sb.append("    <user-data-constraint>\n");
            appendElement(sb, INDENT6, "transport-guarantee", constraint.getUserConstraint());
            sb.append("    </user-data-constraint>\n");
        }
        sb.append("  </security-constraint>\n");
    }
    sb.append('\n');
    if (loginConfig != null) {
        sb.append("  <login-config>\n");
        appendElement(sb, INDENT4, "auth-method", loginConfig.getAuthMethod());
        appendElement(sb, INDENT4, "realm-name", loginConfig.getRealmName());
        if (loginConfig.getErrorPage() != null || loginConfig.getLoginPage() != null) {
            sb.append("    <form-login-config>\n");
            appendElement(sb, INDENT6, "form-login-page", loginConfig.getLoginPage());
            appendElement(sb, INDENT6, "form-error-page", loginConfig.getErrorPage());
            sb.append("    </form-login-config>\n");
        }
        sb.append("  </login-config>\n\n");
    }
    for (String roleName : securityRoles) {
        sb.append("  <security-role>\n");
        appendElement(sb, INDENT4, "role-name", roleName);
        sb.append("  </security-role>\n");
    }
    for (ContextEnvironment envEntry : envEntries.values()) {
        sb.append("  <env-entry>\n");
        appendElement(sb, INDENT4, "description", envEntry.getDescription());
        appendElement(sb, INDENT4, "env-entry-name", envEntry.getName());
        appendElement(sb, INDENT4, "env-entry-type", envEntry.getType());
        appendElement(sb, INDENT4, "env-entry-value", envEntry.getValue());
        appendElement(sb, INDENT4, "mapped-name", envEntry.getProperty("mappedName"));
        for (InjectionTarget target : envEntry.getInjectionTargets()) {
            sb.append("    <injection-target>\n");
            appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
            appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
            sb.append("    </injection-target>\n");
        }
        appendElement(sb, INDENT4, "lookup-name", envEntry.getLookupName());
        sb.append("  </env-entry>\n");
    }
    sb.append('\n');
    for (ContextEjb ejbRef : ejbRefs.values()) {
        sb.append("  <ejb-ref>\n");
        appendElement(sb, INDENT4, "description", ejbRef.getDescription());
        appendElement(sb, INDENT4, "ejb-ref-name", ejbRef.getName());
        appendElement(sb, INDENT4, "ejb-ref-type", ejbRef.getType());
        appendElement(sb, INDENT4, "home", ejbRef.getHome());
        appendElement(sb, INDENT4, "remote", ejbRef.getRemote());
        appendElement(sb, INDENT4, "ejb-link", ejbRef.getLink());
        appendElement(sb, INDENT4, "mapped-name", ejbRef.getProperty("mappedName"));
        for (InjectionTarget target : ejbRef.getInjectionTargets()) {
            sb.append("    <injection-target>\n");
            appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
            appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
            sb.append("    </injection-target>\n");
        }
        appendElement(sb, INDENT4, "lookup-name", ejbRef.getLookupName());
        sb.append("  </ejb-ref>\n");
    }
    sb.append('\n');
    // ejb-local-ref was introduced in Servlet 2.3
    if (getMajorVersion() > 2 || getMinorVersion() > 2) {
        for (ContextLocalEjb ejbLocalRef : ejbLocalRefs.values()) {
            sb.append("  <ejb-local-ref>\n");
            appendElement(sb, INDENT4, "description", ejbLocalRef.getDescription());
            appendElement(sb, INDENT4, "ejb-ref-name", ejbLocalRef.getName());
            appendElement(sb, INDENT4, "ejb-ref-type", ejbLocalRef.getType());
            appendElement(sb, INDENT4, "local-home", ejbLocalRef.getHome());
            appendElement(sb, INDENT4, "local", ejbLocalRef.getLocal());
            appendElement(sb, INDENT4, "ejb-link", ejbLocalRef.getLink());
            appendElement(sb, INDENT4, "mapped-name", ejbLocalRef.getProperty("mappedName"));
            for (InjectionTarget target : ejbLocalRef.getInjectionTargets()) {
                sb.append("    <injection-target>\n");
                appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
                appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
                sb.append("    </injection-target>\n");
            }
            appendElement(sb, INDENT4, "lookup-name", ejbLocalRef.getLookupName());
            sb.append("  </ejb-local-ref>\n");
        }
        sb.append('\n');
    }
    // service-ref was introduced in Servlet 2.4
    if (getMajorVersion() > 2 || getMinorVersion() > 3) {
        for (ContextService serviceRef : serviceRefs.values()) {
            sb.append("  <service-ref>\n");
            appendElement(sb, INDENT4, "description", serviceRef.getDescription());
            appendElement(sb, INDENT4, "display-name", serviceRef.getDisplayname());
            appendElement(sb, INDENT4, "service-ref-name", serviceRef.getName());
            appendElement(sb, INDENT4, "service-interface", serviceRef.getInterface());
            appendElement(sb, INDENT4, "service-ref-type", serviceRef.getType());
            appendElement(sb, INDENT4, "wsdl-file", serviceRef.getWsdlfile());
            appendElement(sb, INDENT4, "jaxrpc-mapping-file", serviceRef.getJaxrpcmappingfile());
            String qname = serviceRef.getServiceqnameNamespaceURI();
            if (qname != null) {
                qname = qname + ":";
            }
            qname = qname + serviceRef.getServiceqnameLocalpart();
            appendElement(sb, INDENT4, "service-qname", qname);
            Iterator<String> endpointIter = serviceRef.getServiceendpoints();
            while (endpointIter.hasNext()) {
                String endpoint = endpointIter.next();
                sb.append("    <port-component-ref>\n");
                appendElement(sb, INDENT6, "service-endpoint-interface", endpoint);
                appendElement(sb, INDENT6, "port-component-link", serviceRef.getProperty(endpoint));
                sb.append("    </port-component-ref>\n");
            }
            Iterator<String> handlerIter = serviceRef.getHandlers();
            while (handlerIter.hasNext()) {
                String handler = handlerIter.next();
                sb.append("    <handler>\n");
                ContextHandler ch = serviceRef.getHandler(handler);
                appendElement(sb, INDENT6, "handler-name", ch.getName());
                appendElement(sb, INDENT6, "handler-class", ch.getHandlerclass());
                sb.append("    </handler>\n");
            }
            // TODO handler-chains
            appendElement(sb, INDENT4, "mapped-name", serviceRef.getProperty("mappedName"));
            for (InjectionTarget target : serviceRef.getInjectionTargets()) {
                sb.append("    <injection-target>\n");
                appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
                appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
                sb.append("    </injection-target>\n");
            }
            appendElement(sb, INDENT4, "lookup-name", serviceRef.getLookupName());
            sb.append("  </service-ref>\n");
        }
        sb.append('\n');
    }
    if (!postConstructMethods.isEmpty()) {
        for (Entry<String, String> entry : postConstructMethods.entrySet()) {
            sb.append("  <post-construct>\n");
            appendElement(sb, INDENT4, "lifecycle-callback-class", entry.getKey());
            appendElement(sb, INDENT4, "lifecycle-callback-method", entry.getValue());
            sb.append("  </post-construct>\n");
        }
        sb.append('\n');
    }
    if (!preDestroyMethods.isEmpty()) {
        for (Entry<String, String> entry : preDestroyMethods.entrySet()) {
            sb.append("  <pre-destroy>\n");
            appendElement(sb, INDENT4, "lifecycle-callback-class", entry.getKey());
            appendElement(sb, INDENT4, "lifecycle-callback-method", entry.getValue());
            sb.append("  </pre-destroy>\n");
        }
        sb.append('\n');
    }
    // Servlet 2.4
    if (getMajorVersion() > 2 || getMinorVersion() > 3) {
        for (MessageDestinationRef mdr : messageDestinationRefs.values()) {
            sb.append("  <message-destination-ref>\n");
            appendElement(sb, INDENT4, "description", mdr.getDescription());
            appendElement(sb, INDENT4, "message-destination-ref-name", mdr.getName());
            appendElement(sb, INDENT4, "message-destination-type", mdr.getType());
            appendElement(sb, INDENT4, "message-destination-usage", mdr.getUsage());
            appendElement(sb, INDENT4, "message-destination-link", mdr.getLink());
            appendElement(sb, INDENT4, "mapped-name", mdr.getProperty("mappedName"));
            for (InjectionTarget target : mdr.getInjectionTargets()) {
                sb.append("    <injection-target>\n");
                appendElement(sb, INDENT6, "injection-target-class", target.getTargetClass());
                appendElement(sb, INDENT6, "injection-target-name", target.getTargetName());
                sb.append("    </injection-target>\n");
            }
            appendElement(sb, INDENT4, "lookup-name", mdr.getLookupName());
            sb.append("  </message-destination-ref>\n");
        }
        sb.append('\n');
        for (MessageDestination md : messageDestinations.values()) {
            sb.append("  <message-destination>\n");
            appendElement(sb, INDENT4, "description", md.getDescription());
            appendElement(sb, INDENT4, "display-name", md.getDisplayName());
            appendElement(sb, INDENT4, "message-destination-name", md.getName());
            appendElement(sb, INDENT4, "mapped-name", md.getProperty("mappedName"));
            appendElement(sb, INDENT4, "lookup-name", md.getLookupName());
            sb.append("  </message-destination>\n");
        }
        sb.append('\n');
    }
    // locale-encoding-mapping-list was introduced in Servlet 2.4
    if (getMajorVersion() > 2 || getMinorVersion() > 3) {
        if (localeEncodingMappings.size() > 0) {
            sb.append("  <locale-encoding-mapping-list>\n");
            for (Map.Entry<String, String> entry : localeEncodingMappings.entrySet()) {
                sb.append("    <locale-encoding-mapping>\n");
                appendElement(sb, INDENT6, "locale", entry.getKey());
                appendElement(sb, INDENT6, "encoding", entry.getValue());
                sb.append("    </locale-encoding-mapping>\n");
            }
            sb.append("  </locale-encoding-mapping-list>\n");
            sb.append("\n");
        }
    }
    // deny-uncovered-http-methods was introduced in Servlet 3.1
    if (getMajorVersion() > 3 || (getMajorVersion() == 3 && getMinorVersion() > 0)) {
        if (denyUncoveredHttpMethods) {
            sb.append("  <deny-uncovered-http-methods/>");
            sb.append("\n");
        }
    }
    // request-encoding and response-encoding was introduced in Servlet 4.0
    if (getMajorVersion() >= 4) {
        appendElement(sb, INDENT2, "request-character-encoding", requestCharacterEncoding);
        appendElement(sb, INDENT2, "response-character-encoding", responseCharacterEncoding);
    }
    sb.append("</web-app>");
    return sb.toString();
}
Also used : SessionTrackingMode(jakarta.servlet.SessionTrackingMode) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 3 with SessionTrackingMode

use of jakarta.servlet.SessionTrackingMode in project spring-security by spring-projects.

the class AbstractSecurityWebApplicationInitializerTests method onStartupWhenDefaultsThenSessionTrackingModes.

@Test
public void onStartupWhenDefaultsThenSessionTrackingModes() {
    ServletContext context = mock(ServletContext.class);
    FilterRegistration.Dynamic registration = mock(FilterRegistration.Dynamic.class);
    ArgumentCaptor<DelegatingFilterProxy> proxyCaptor = ArgumentCaptor.forClass(DelegatingFilterProxy.class);
    given(context.addFilter(eq("springSecurityFilterChain"), proxyCaptor.capture())).willReturn(registration);
    ArgumentCaptor<Set<SessionTrackingMode>> modesCaptor = ArgumentCaptor.forClass(new HashSet<SessionTrackingMode>() {
    }.getClass());
    willDoNothing().given(context).setSessionTrackingModes(modesCaptor.capture());
    new AbstractSecurityWebApplicationInitializer() {
    }.onStartup(context);
    assertProxyDefaults(proxyCaptor.getValue());
    Set<SessionTrackingMode> modes = modesCaptor.getValue();
    assertThat(modes).hasSize(1);
    assertThat(modes).containsExactly(SessionTrackingMode.COOKIE);
}
Also used : HashSet(java.util.HashSet) EnumSet(java.util.EnumSet) Set(java.util.Set) SessionTrackingMode(jakarta.servlet.SessionTrackingMode) ServletContext(jakarta.servlet.ServletContext) FilterRegistration(jakarta.servlet.FilterRegistration) DelegatingFilterProxy(org.springframework.web.filter.DelegatingFilterProxy) HashSet(java.util.HashSet) Test(org.junit.jupiter.api.Test)

Aggregations

SessionTrackingMode (jakarta.servlet.SessionTrackingMode)3 FilterRegistration (jakarta.servlet.FilterRegistration)2 ServletContext (jakarta.servlet.ServletContext)2 EnumSet (java.util.EnumSet)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 Test (org.junit.jupiter.api.Test)2 DelegatingFilterProxy (org.springframework.web.filter.DelegatingFilterProxy)2 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1