You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2025/11/21 09:14:21 UTC
(struts) 04/05: feat(compress): WW-5256 add global compression configuration
This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch feature/WW-5256-freemarker-compress
in repository https://gitbox.apache.org/repos/asf/struts.git
commit cb122c5ab7b1b79fc82e9974886d1dd83161c4e1
Author: Lukasz Lenart <lu...@apache.org>
AuthorDate: Fri Nov 21 10:08:51 2025 +0100
feat(compress): WW-5256 add global compression configuration
- Add struts.compress.enabled configuration option
- Compress tag respects global setting unless force=true
- Add @since 7.2.0 tag to new constant
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <no...@anthropic.com>
---
core/src/main/java/org/apache/struts2/StrutsConstants.java | 8 ++++++++
.../main/java/org/apache/struts2/components/Compress.java | 13 +++++++++++++
.../main/resources/org/apache/struts2/default.properties | 3 +++
3 files changed, 24 insertions(+)
diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java
index 457e9642c..4376c45de 100644
--- a/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java
@@ -335,6 +335,14 @@ public final class StrutsConstants {
*/
public static final String STRUTS_FREEMARKER_WHITESPACE_STRIPPING = "struts.freemarker.whitespaceStripping";
+ /**
+ * Controls whether the compress tag is enabled globally.
+ * When disabled, the compress tag will not compress output regardless of other settings.
+ *
+ * @since 7.2.0
+ */
+ public static final String STRUTS_COMPRESS_ENABLED = "struts.compress.enabled";
+
/**
* Extension point for the Struts CompoundRootAccessor
*/
diff --git a/core/src/main/java/org/apache/struts2/components/Compress.java b/core/src/main/java/org/apache/struts2/components/Compress.java
index aa6765c07..8a60737e6 100644
--- a/core/src/main/java/org/apache/struts2/components/Compress.java
+++ b/core/src/main/java/org/apache/struts2/components/Compress.java
@@ -18,8 +18,11 @@
*/
package org.apache.struts2.components;
+import org.apache.commons.lang3.BooleanUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
+import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.inject.Inject;
import org.apache.struts2.util.ValueStack;
import org.apache.struts2.views.annotations.StrutsTag;
import org.apache.struts2.views.annotations.StrutsTagAttribute;
@@ -73,15 +76,25 @@ public class Compress extends Component {
private static final Logger LOG = LogManager.getLogger(Compress.class);
private String force;
+ private boolean compressionEnabled = true;
public Compress(ValueStack stack) {
super(stack);
}
+ @Inject(value = StrutsConstants.STRUTS_COMPRESS_ENABLED, required = false)
+ public void setCompressionEnabled(String compressionEnabled) {
+ this.compressionEnabled = BooleanUtils.toBoolean(compressionEnabled);
+ }
+
@Override
public boolean end(Writer writer, String body) {
Object forceValue = findValue(force, Boolean.class);
boolean forced = forceValue != null && Boolean.parseBoolean(forceValue.toString());
+ if (!compressionEnabled && !forced) {
+ LOG.debug("Compression disabled globally, skipping: {}", body);
+ return super.end(writer, body, true);
+ }
if (devMode && !forced) {
LOG.debug("Avoids compressing output: {} in DevMode", body);
return super.end(writer, body, true);
diff --git a/core/src/main/resources/org/apache/struts2/default.properties b/core/src/main/resources/org/apache/struts2/default.properties
index 60c77514f..f8903ead2 100644
--- a/core/src/main/resources/org/apache/struts2/default.properties
+++ b/core/src/main/resources/org/apache/struts2/default.properties
@@ -211,6 +211,9 @@ struts.freemarker.mru.max.strong.size=0
### Automatically disabled when devMode is enabled.
struts.freemarker.whitespaceStripping=true
+### Controls whether the compress tag is enabled globally.
+struts.compress.enabled=true
+
### configure the XSLTResult class to use stylesheet caching.
### Set to true for developers and false for production.
struts.xslt.nocache=false