This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-5262-beans in repository https://gitbox.apache.org/repos/asf/struts.git
commit 944c31f98f84d50ec90b818aaffe8e5616463355 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Thu Dec 1 07:32:16 2022 +0100 WW-5262 Extracts excluded classes and beans into dedicated XML config files --- core/src/main/resources/struts-beans.xml | 248 +++++++++++++++++ core/src/main/resources/struts-default.xml | 297 +-------------------- .../src/main/resources/struts-excluded-classes.xml | 106 ++++++++ 3 files changed, 356 insertions(+), 295 deletions(-) diff --git a/core/src/main/resources/struts-beans.xml b/core/src/main/resources/struts-beans.xml new file mode 100644 index 000000000..eac1ff8be --- /dev/null +++ b/core/src/main/resources/struts-beans.xml @@ -0,0 +1,248 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +--> + +<!-- + When declaring beans in this file you must either use name="struts" or don't name the bean at all. + + The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.StrutsBeanSelectionProvider} - + it is then the default bean's name and {@link org.apache.struts2.config.StrutsBeanSelectionProvider} links name "struts" + with "default" (aliasing it) + + If name won't be defined then the "default" value will be used {@link com.opensymphony.xwork2.inject.Container#DEFAULT_NAME} + and {@link com.opensymphony.xwork2.inject.Inject} +--> +<!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN" + "https://struts.apache.org/dtds/struts-6.0.dtd"> + +<struts> + + <bean class="com.opensymphony.xwork2.ObjectFactory" name="struts"/> + <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" + class="org.apache.struts2.factory.StrutsResultFactory"/> + <bean type="com.opensymphony.xwork2.factory.ActionFactory" name="struts" + class="com.opensymphony.xwork2.factory.DefaultActionFactory"/> + <bean type="com.opensymphony.xwork2.factory.ConverterFactory" name="struts" + class="com.opensymphony.xwork2.factory.StrutsConverterFactory"/> + <bean type="com.opensymphony.xwork2.factory.InterceptorFactory" name="struts" + class="com.opensymphony.xwork2.factory.DefaultInterceptorFactory"/> + <bean type="com.opensymphony.xwork2.factory.ValidatorFactory" name="struts" + class="com.opensymphony.xwork2.factory.DefaultValidatorFactory"/> + <bean type="com.opensymphony.xwork2.factory.UnknownHandlerFactory" name="struts" + class="com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory"/> + + <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" + name="system" scope="singleton"/> + <bean type="com.opensymphony.xwork2.FileManagerFactory" + class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="struts" scope="singleton"/> + + <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" + class="org.apache.struts2.factory.StrutsActionProxyFactory"/> + <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="prefix" + class="org.apache.struts2.factory.PrefixBasedActionProxyFactory"/> + + <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="struts" + class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> + + <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts" + class="com.opensymphony.xwork2.util.WildcardHelper"/> + <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="namedVariable" + class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/> + <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="regex" + class="org.apache.struts2.util.RegexPatternMatcher"/> + + <bean type="org.apache.struts2.util.ContentTypeMatcher" name="struts" + class="org.apache.struts2.util.DefaultContentTypeMatcher"/> + + <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" + class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper"/> + <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" + class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper"/> + <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="prefix" + class="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/> + <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" + class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper"/> + <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" + class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper"/> + + <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" + class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="prototype"/> + <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta-stream" + class="org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="prototype"/> + + <bean type="org.apache.struts2.views.TagLibraryModelProvider" name="s" + class="org.apache.struts2.views.DefaultTagLibrary"/> + + <bean class="org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader"/> + <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts"/> + + <bean class="org.apache.struts2.components.template.TemplateEngineManager"/> + <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" + class="org.apache.struts2.components.template.FreemarkerTemplateEngine"/> + <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" + class="org.apache.struts2.components.template.JspTemplateEngine"/> + + <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" + class="com.opensymphony.xwork2.conversion.impl.XWorkConverter"/> + + <bean type="com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor" name="struts" + class="org.apache.struts2.conversion.StrutsConversionPropertiesProcessor"/> + <bean type="com.opensymphony.xwork2.conversion.ConversionFileProcessor" name="struts" + class="com.opensymphony.xwork2.conversion.impl.DefaultConversionFileProcessor"/> + <bean type="com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor" name="struts" + class="com.opensymphony.xwork2.conversion.impl.DefaultConversionAnnotationProcessor"/> + <bean type="com.opensymphony.xwork2.conversion.TypeConverterCreator" name="struts" + class="org.apache.struts2.conversion.StrutsTypeConverterCreator"/> + <bean type="com.opensymphony.xwork2.conversion.TypeConverterHolder" name="struts" + class="org.apache.struts2.conversion.StrutsTypeConverterHolder"/> + + <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter"/> + + <bean type="com.opensymphony.xwork2.conversion.impl.CollectionConverter" name="struts" + class="com.opensymphony.xwork2.conversion.impl.CollectionConverter" scope="singleton"/> + <bean type="com.opensymphony.xwork2.conversion.impl.ArrayConverter" name="struts" + class="com.opensymphony.xwork2.conversion.impl.ArrayConverter" scope="singleton"/> + <bean type="com.opensymphony.xwork2.conversion.impl.DateConverter" name="struts" + class="com.opensymphony.xwork2.conversion.impl.DateConverter" scope="singleton"/> + <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" + class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/> + <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" + class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/> + + <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="global-only" + class="com.opensymphony.xwork2.util.GlobalLocalizedTextProvider" scope="singleton"/> + <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="struts" + class="com.opensymphony.xwork2.util.StrutsLocalizedTextProvider" scope="singleton"/> + + <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" + scope="singleton"/> + <bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" + class="com.opensymphony.xwork2.StrutsTextProviderFactory" scope="singleton"/> + <bean type="com.opensymphony.xwork2.LocaleProviderFactory" name="struts" + class="com.opensymphony.xwork2.DefaultLocaleProviderFactory" scope="singleton"/> + + <bean type="org.apache.struts2.components.UrlRenderer" name="struts" + class="org.apache.struts2.components.ServletUrlRenderer"/> + <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" + class="org.apache.struts2.views.util.DefaultUrlHelper"/> + + <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" + class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory"/> + <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" + class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider"/> + <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" + class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory"/> + + <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" + class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler"/> + + <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" + class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager"/> + <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" + class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager"/> + + <bean type="com.opensymphony.xwork2.validator.ValidatorFactory" + class="com.opensymphony.xwork2.validator.DefaultValidatorFactory"/> + <bean type="com.opensymphony.xwork2.validator.ValidatorFileParser" + class="com.opensymphony.xwork2.validator.DefaultValidatorFileParser"/> + + <bean class="com.opensymphony.xwork2.ognl.OgnlUtil"/> + + <bean type="com.opensymphony.xwork2.util.TextParser" name="struts" + class="com.opensymphony.xwork2.util.OgnlTextParser" scope="singleton"/> + + <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" + class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.lang.Object" + class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.Iterator" + class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" + class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.List" + class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.Set" + class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.Map" + class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.Collection" + class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" + class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.HttpParameters" + class="com.opensymphony.xwork2.ognl.accessor.HttpParametersPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.Parameter" + class="com.opensymphony.xwork2.ognl.accessor.ParameterPropertyAccessor"/> + + <bean type="ognl.MethodAccessor" name="java.lang.Object" + class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor"/> + <bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" + class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor"/> + + <bean class="org.apache.struts2.views.jsp.ui.OgnlTool"/> + + <bean type="org.apache.struts2.dispatcher.StaticContentLoader" + class="org.apache.struts2.dispatcher.DefaultStaticContentLoader" name="struts"/> + <bean type="com.opensymphony.xwork2.UnknownHandlerManager" + class="com.opensymphony.xwork2.DefaultUnknownHandlerManager" name="struts"/> + + <bean type="org.apache.struts2.dispatcher.DispatcherErrorHandler" name="struts" + class="org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler"/> + + <!-- Silly workarounds for OGNL since there is currently no way to flush its internal caches --> + <bean type="ognl.PropertyAccessor" name="java.util.ArrayList" + class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.HashSet" + class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor"/> + <bean type="ognl.PropertyAccessor" name="java.util.HashMap" + class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor"/> + + <bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" + class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="prototype"/> + <bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" + class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="prototype"/> + <bean type="com.opensymphony.xwork2.security.NotExcludedAcceptedPatternsChecker" name="struts" + class="com.opensymphony.xwork2.security.DefaultNotExcludedAcceptedPatternsChecker" scope="singleton"/> + + <bean type="com.opensymphony.xwork2.config.providers.ValueSubstitutor" + class="com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor" scope="singleton"/> + + <bean type="org.apache.struts2.components.date.DateFormatter" name="simpleDateFormatter" + class="org.apache.struts2.components.date.SimpleDateFormatAdapter" scope="singleton"/> + <bean type="org.apache.struts2.components.date.DateFormatter" name="dateTimeFormatter" + class="org.apache.struts2.components.date.DateTimeFormatterAdapter" scope="singleton"/> + + <bean type="com.opensymphony.xwork2.ognl.ExpressionCacheFactory" name="struts" + class="com.opensymphony.xwork2.ognl.DefaultOgnlExpressionCacheFactory" scope="singleton"/> + <bean type="com.opensymphony.xwork2.ognl.BeanInfoCacheFactory" name="struts" + class="com.opensymphony.xwork2.ognl.DefaultOgnlBeanInfoCacheFactory" scope="singleton"/> + + <bean type="org.apache.struts2.url.QueryStringBuilder" name="strutsQueryStringBuilder" + class="org.apache.struts2.url.StrutsQueryStringBuilder" scope="singleton"/> + <bean type="org.apache.struts2.url.QueryStringParser" name="strutsQueryStringParser" + class="org.apache.struts2.url.StrutsQueryStringParser" scope="singleton"/> + <bean type="org.apache.struts2.url.UrlEncoder" name="strutsUrlEncoder" + class="org.apache.struts2.url.StrutsUrlEncoder" scope="singleton"/> + <bean type="org.apache.struts2.url.UrlDecoder" name="strutsUrlDecoder" + class="org.apache.struts2.url.StrutsUrlDecoder" scope="singleton"/> + +</struts> diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml index 0bb197b56..420a2c56a 100644 --- a/core/src/main/resources/struts-default.xml +++ b/core/src/main/resources/struts-default.xml @@ -20,307 +20,14 @@ */ --> -<!-- - When declaring beans in this file you must either use name="struts" or don't name the bean at all. - - The name="struts" must be used when alias was defined in {@link org.apache.struts2.config.StrutsBeanSelectionProvider} - - it is then the default bean's name and {@link org.apache.struts2.config.StrutsBeanSelectionProvider} links name "struts" - with "default" (aliasing it) - - If name won't be defined then the "default" value will be used {@link com.opensymphony.xwork2.inject.Container#DEFAULT_NAME} - and {@link com.opensymphony.xwork2.inject.Inject} ---> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN" "https://struts.apache.org/dtds/struts-6.0.dtd"> <struts> - <constant name="struts.excludedClasses" - value=" - java.lang.Object, - java.lang.Runtime, - java.lang.System, - java.lang.Class, - java.lang.ClassLoader, - java.lang.Shutdown, - java.lang.ProcessBuilder, - java.lang.Thread, - sun.misc.Unsafe, - com.opensymphony.xwork2.ActionContext"/> - - <constant name="struts.devMode.excludedClasses" - value=" - java.lang.Object, - java.lang.Runtime, - java.lang.System, - java.lang.Class, - java.lang.ClassLoader, - java.lang.Shutdown, - java.lang.ProcessBuilder, - sun.misc.Unsafe"/> - - <!-- this must be valid regex, each '.' in package name must be escaped! --> - <!-- it's more flexible but slower than simple string comparison --> - <!-- constant name="struts.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" / --> - <!-- constant name="struts.devMode.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" / --> - - <!-- this is simpler version of the above used with string comparison --> - <constant name="struts.excludedPackageNames" - value=" - ognl., - java.io., - java.net., - java.nio., - javax., - freemarker.core., - freemarker.template., - freemarker.ext.jsp., - freemarker.ext.rhino., - sun.misc., - sun.reflect., - javassist., - org.apache.velocity., - org.objectweb.asm., - org.springframework.context., - com.opensymphony.xwork2.inject., - com.opensymphony.xwork2.ognl., - com.opensymphony.xwork2.security., - com.opensymphony.xwork2.util., - org.apache.tomcat., - org.apache.catalina.core., - org.wildfly.extension.undertow.deployment."/> - - <constant name="struts.devMode.excludedPackageNames" - value=" - ognl., - java.io., - java.net., - java.nio., - javax., - freemarker.core., - freemarker.template., - freemarker.ext.jsp., - freemarker.ext.rhino., - sun.misc., - sun.reflect., - javassist., - org.apache.velocity., - org.objectweb.asm., - org.springframework.context., - com.opensymphony.xwork2.inject., - com.opensymphony.xwork2.ognl., - com.opensymphony.xwork2.security., - com.opensymphony.xwork2.util."/> - - <bean class="com.opensymphony.xwork2.ObjectFactory" name="struts"/> - <bean type="com.opensymphony.xwork2.factory.ResultFactory" name="struts" - class="org.apache.struts2.factory.StrutsResultFactory"/> - <bean type="com.opensymphony.xwork2.factory.ActionFactory" name="struts" - class="com.opensymphony.xwork2.factory.DefaultActionFactory"/> - <bean type="com.opensymphony.xwork2.factory.ConverterFactory" name="struts" - class="com.opensymphony.xwork2.factory.StrutsConverterFactory"/> - <bean type="com.opensymphony.xwork2.factory.InterceptorFactory" name="struts" - class="com.opensymphony.xwork2.factory.DefaultInterceptorFactory"/> - <bean type="com.opensymphony.xwork2.factory.ValidatorFactory" name="struts" - class="com.opensymphony.xwork2.factory.DefaultValidatorFactory"/> - <bean type="com.opensymphony.xwork2.factory.UnknownHandlerFactory" name="struts" - class="com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory"/> - - <bean type="com.opensymphony.xwork2.FileManager" class="com.opensymphony.xwork2.util.fs.DefaultFileManager" - name="system" scope="singleton"/> - <bean type="com.opensymphony.xwork2.FileManagerFactory" - class="com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory" name="struts" scope="singleton"/> - - <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" - class="org.apache.struts2.factory.StrutsActionProxyFactory"/> - <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="prefix" - class="org.apache.struts2.factory.PrefixBasedActionProxyFactory"/> - - <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="struts" - class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> - - <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts" - class="com.opensymphony.xwork2.util.WildcardHelper"/> - <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="namedVariable" - class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/> - <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="regex" - class="org.apache.struts2.util.RegexPatternMatcher"/> - - <bean type="org.apache.struts2.util.ContentTypeMatcher" name="struts" - class="org.apache.struts2.util.DefaultContentTypeMatcher"/> - - <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" - class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper"/> - <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" - class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper"/> - <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="prefix" - class="org.apache.struts2.dispatcher.mapper.PrefixBasedActionMapper"/> - <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" - class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper"/> - <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" - class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper"/> - - <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" - class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="prototype"/> - <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta-stream" - class="org.apache.struts2.dispatcher.multipart.JakartaStreamMultiPartRequest" scope="prototype"/> - - <bean type="org.apache.struts2.views.TagLibraryModelProvider" name="s" - class="org.apache.struts2.views.DefaultTagLibrary"/> - - <bean class="org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader"/> - <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts"/> - - <bean class="org.apache.struts2.components.template.TemplateEngineManager"/> - <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" - class="org.apache.struts2.components.template.FreemarkerTemplateEngine"/> - <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" - class="org.apache.struts2.components.template.JspTemplateEngine"/> - - <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" - class="com.opensymphony.xwork2.conversion.impl.XWorkConverter"/> - - <bean type="com.opensymphony.xwork2.conversion.ConversionPropertiesProcessor" name="struts" - class="org.apache.struts2.conversion.StrutsConversionPropertiesProcessor"/> - <bean type="com.opensymphony.xwork2.conversion.ConversionFileProcessor" name="struts" - class="com.opensymphony.xwork2.conversion.impl.DefaultConversionFileProcessor"/> - <bean type="com.opensymphony.xwork2.conversion.ConversionAnnotationProcessor" name="struts" - class="com.opensymphony.xwork2.conversion.impl.DefaultConversionAnnotationProcessor"/> - <bean type="com.opensymphony.xwork2.conversion.TypeConverterCreator" name="struts" - class="org.apache.struts2.conversion.StrutsTypeConverterCreator"/> - <bean type="com.opensymphony.xwork2.conversion.TypeConverterHolder" name="struts" - class="org.apache.struts2.conversion.StrutsTypeConverterHolder"/> - - <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter"/> - - <bean type="com.opensymphony.xwork2.conversion.impl.CollectionConverter" name="struts" - class="com.opensymphony.xwork2.conversion.impl.CollectionConverter" scope="singleton"/> - <bean type="com.opensymphony.xwork2.conversion.impl.ArrayConverter" name="struts" - class="com.opensymphony.xwork2.conversion.impl.ArrayConverter" scope="singleton"/> - <bean type="com.opensymphony.xwork2.conversion.impl.DateConverter" name="struts" - class="com.opensymphony.xwork2.conversion.impl.DateConverter" scope="singleton"/> - <bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" - class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/> - <bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" - class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/> - - <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="global-only" - class="com.opensymphony.xwork2.util.GlobalLocalizedTextProvider" scope="singleton"/> - <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="struts" - class="com.opensymphony.xwork2.util.StrutsLocalizedTextProvider" scope="singleton"/> - - <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" - scope="singleton"/> - <bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" - class="com.opensymphony.xwork2.StrutsTextProviderFactory" scope="singleton"/> - <bean type="com.opensymphony.xwork2.LocaleProviderFactory" name="struts" - class="com.opensymphony.xwork2.DefaultLocaleProviderFactory" scope="singleton"/> - - <bean type="org.apache.struts2.components.UrlRenderer" name="struts" - class="org.apache.struts2.components.ServletUrlRenderer"/> - <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" - class="org.apache.struts2.views.util.DefaultUrlHelper"/> - - <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" - class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory"/> - <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" - class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider"/> - <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" - class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory"/> - - <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" - class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler"/> - - <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" - class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager"/> - <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" - class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager"/> - - <bean type="com.opensymphony.xwork2.validator.ValidatorFactory" - class="com.opensymphony.xwork2.validator.DefaultValidatorFactory"/> - <bean type="com.opensymphony.xwork2.validator.ValidatorFileParser" - class="com.opensymphony.xwork2.validator.DefaultValidatorFileParser"/> - - <bean class="com.opensymphony.xwork2.ognl.OgnlUtil"/> - - <bean type="com.opensymphony.xwork2.util.TextParser" name="struts" - class="com.opensymphony.xwork2.util.OgnlTextParser" scope="singleton"/> - - <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" - class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.lang.Object" - class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.Iterator" - class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" - class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.List" - class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.Set" - class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.Map" - class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.Collection" - class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" - class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.HttpParameters" - class="com.opensymphony.xwork2.ognl.accessor.HttpParametersPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="org.apache.struts2.dispatcher.Parameter" - class="com.opensymphony.xwork2.ognl.accessor.ParameterPropertyAccessor"/> - - <bean type="ognl.MethodAccessor" name="java.lang.Object" - class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor"/> - <bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" - class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor"/> - - <bean class="org.apache.struts2.views.jsp.ui.OgnlTool"/> - - <bean type="org.apache.struts2.dispatcher.StaticContentLoader" - class="org.apache.struts2.dispatcher.DefaultStaticContentLoader" name="struts"/> - <bean type="com.opensymphony.xwork2.UnknownHandlerManager" - class="com.opensymphony.xwork2.DefaultUnknownHandlerManager" name="struts"/> - - <bean type="org.apache.struts2.dispatcher.DispatcherErrorHandler" name="struts" - class="org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler"/> - - <!-- Silly workarounds for OGNL since there is currently no way to flush its internal caches --> - <bean type="ognl.PropertyAccessor" name="java.util.ArrayList" - class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.HashSet" - class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor"/> - <bean type="ognl.PropertyAccessor" name="java.util.HashMap" - class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor"/> - - <bean type="com.opensymphony.xwork2.security.ExcludedPatternsChecker" name="struts" - class="com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker" scope="prototype"/> - <bean type="com.opensymphony.xwork2.security.AcceptedPatternsChecker" name="struts" - class="com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker" scope="prototype"/> - <bean type="com.opensymphony.xwork2.security.NotExcludedAcceptedPatternsChecker" name="struts" - class="com.opensymphony.xwork2.security.DefaultNotExcludedAcceptedPatternsChecker" scope="singleton"/> - - <bean type="com.opensymphony.xwork2.config.providers.ValueSubstitutor" - class="com.opensymphony.xwork2.config.providers.EnvsValueSubstitutor" scope="singleton"/> - - <bean type="org.apache.struts2.components.date.DateFormatter" name="simpleDateFormatter" - class="org.apache.struts2.components.date.SimpleDateFormatAdapter" scope="singleton"/> - <bean type="org.apache.struts2.components.date.DateFormatter" name="dateTimeFormatter" - class="org.apache.struts2.components.date.DateTimeFormatterAdapter" scope="singleton"/> - - <bean type="com.opensymphony.xwork2.ognl.ExpressionCacheFactory" name="struts" - class="com.opensymphony.xwork2.ognl.DefaultOgnlExpressionCacheFactory" scope="singleton"/> - <bean type="com.opensymphony.xwork2.ognl.BeanInfoCacheFactory" name="struts" - class="com.opensymphony.xwork2.ognl.DefaultOgnlBeanInfoCacheFactory" scope="singleton"/> - - <bean type="org.apache.struts2.url.QueryStringBuilder" name="strutsQueryStringBuilder" - class="org.apache.struts2.url.StrutsQueryStringBuilder" scope="singleton"/> - <bean type="org.apache.struts2.url.QueryStringParser" name="strutsQueryStringParser" - class="org.apache.struts2.url.StrutsQueryStringParser" scope="singleton"/> - <bean type="org.apache.struts2.url.UrlEncoder" name="strutsUrlEncoder" - class="org.apache.struts2.url.StrutsUrlEncoder" scope="singleton"/> - <bean type="org.apache.struts2.url.UrlDecoder" name="strutsUrlDecoder" - class="org.apache.struts2.url.StrutsUrlDecoder" scope="singleton"/> + <include file="struts-excluded-classes.xml"/> + <include file="struts-beans.xml"/> <package name="struts-default" abstract="true"> <result-types> diff --git a/core/src/main/resources/struts-excluded-classes.xml b/core/src/main/resources/struts-excluded-classes.xml new file mode 100644 index 000000000..524194af9 --- /dev/null +++ b/core/src/main/resources/struts-excluded-classes.xml @@ -0,0 +1,106 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +--> + +<!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN" + "https://struts.apache.org/dtds/struts-6.0.dtd"> + +<struts> + + <constant name="struts.excludedClasses" + value=" + java.lang.Object, + java.lang.Runtime, + java.lang.System, + java.lang.Class, + java.lang.ClassLoader, + java.lang.Shutdown, + java.lang.ProcessBuilder, + java.lang.Thread, + sun.misc.Unsafe, + com.opensymphony.xwork2.ActionContext"/> + + <constant name="struts.devMode.excludedClasses" + value=" + java.lang.Object, + java.lang.Runtime, + java.lang.System, + java.lang.Class, + java.lang.ClassLoader, + java.lang.Shutdown, + java.lang.ProcessBuilder, + sun.misc.Unsafe"/> + + <!-- this must be valid regex, each '.' in package name must be escaped! --> + <!-- it's more flexible but slower than simple string comparison --> + <!-- constant name="struts.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" / --> + <!-- constant name="struts.devMode.excludedPackageNamePatterns" value="^java\.lang\..*,^ognl.*,^(?!javax\.servlet\..+)(javax\..+)" / --> + + <!-- this is simpler version of the above used with string comparison --> + <constant name="struts.excludedPackageNames" + value=" + ognl., + java.io., + java.net., + java.nio., + javax., + freemarker.core., + freemarker.template., + freemarker.ext.jsp., + freemarker.ext.rhino., + sun.misc., + sun.reflect., + javassist., + org.apache.velocity., + org.objectweb.asm., + org.springframework.context., + com.opensymphony.xwork2.inject., + com.opensymphony.xwork2.ognl., + com.opensymphony.xwork2.security., + com.opensymphony.xwork2.util., + org.apache.tomcat., + org.apache.catalina.core., + org.wildfly.extension.undertow.deployment."/> + + <constant name="struts.devMode.excludedPackageNames" + value=" + ognl., + java.io., + java.net., + java.nio., + javax., + freemarker.core., + freemarker.template., + freemarker.ext.jsp., + freemarker.ext.rhino., + sun.misc., + sun.reflect., + javassist., + org.apache.velocity., + org.objectweb.asm., + org.springframework.context., + com.opensymphony.xwork2.inject., + com.opensymphony.xwork2.ognl., + com.opensymphony.xwork2.security., + com.opensymphony.xwork2.util."/> + +</struts>