WW-5504 Allows to use request instead of session attribute to store nonce (#1174)

This commit is contained in:
Lukasz Lenart
2025-09-15 07:13:24 +02:00
committed by GitHub
parent 15e257d075
commit 6b2de2df4a
32 changed files with 401 additions and 47 deletions
@@ -23,6 +23,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.ActionError;
import org.apache.struts2.components.Anchor;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
import java.util.ArrayList;
import java.util.List;
@@ -72,6 +74,7 @@ public class ActionErrorTest extends AbstractTest {
//errors are needed to setup stack
super.setUp();
this.tag = new ActionError(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -23,6 +23,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.ActionError;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
import java.util.ArrayList;
import java.util.List;
@@ -72,6 +74,7 @@ public class ActionMessageTest extends AbstractTest {
//errors are needed to setup stack
super.setUp();
this.tag = new ActionError(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -24,6 +24,8 @@ import com.opensymphony.xwork2.security.DefaultNotExcludedAcceptedPatternsChecke
import org.apache.struts2.components.Anchor;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.components.ServletUrlRenderer;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class AnchorTest extends AbstractTest {
private Anchor tag;
@@ -111,6 +113,7 @@ public class AnchorTest extends AbstractTest {
this.tag = new Anchor(stack, request, response);
this.tag.setUrlRenderer(new ServletUrlRenderer());
this.tag.setNotExcludedAcceptedPatterns(new DefaultNotExcludedAcceptedPatternsChecker());
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -23,6 +23,8 @@ package org.apache.struts2.views.java.simple;
import com.opensymphony.xwork2.security.DefaultNotExcludedAcceptedPatternsChecker;
import org.apache.struts2.components.Checkbox;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class CheckboxTest extends AbstractCommonAttributesTest {
private Checkbox tag;
@@ -88,6 +90,7 @@ public class CheckboxTest extends AbstractCommonAttributesTest {
super.setUp();
tag = new Checkbox(stack, request, response);
tag.setNotExcludedAcceptedPatterns(new DefaultNotExcludedAcceptedPatternsChecker());
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.DateTextField;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class DateTextFieldTest extends AbstractCommonAttributesTest {
@@ -56,6 +58,7 @@ public class DateTextFieldTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new DateTextField(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.FieldError;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
import java.util.*;
@@ -100,6 +102,7 @@ public class FieldErrorTest extends AbstractTest {
//errors are needed to setup stack
super.setUp();
this.tag = new FieldError(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.File;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class FileTest extends AbstractCommonAttributesTest {
private File tag;
@@ -50,6 +52,7 @@ public class FileTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new File(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -23,6 +23,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Form;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.components.UrlRenderer;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
import org.easymock.EasyMock;
public class FormTest extends AbstractCommonAttributesTest {
@@ -80,5 +82,6 @@ public class FormTest extends AbstractCommonAttributesTest {
UrlRenderer renderer = EasyMock.createNiceMock(UrlRenderer.class);
EasyMock.replay(renderer);
tag.setUrlRenderer(renderer);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
}
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Head;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class HeadTest extends AbstractTest {
private Head tag;
@@ -39,6 +41,7 @@ public class HeadTest extends AbstractTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Head(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Hidden;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class HiddenTest extends AbstractTest {
private Hidden tag;
@@ -49,6 +51,7 @@ public class HiddenTest extends AbstractTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Hidden(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Label;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class LabelTest extends AbstractCommonAttributesTest {
private Label tag;
@@ -48,6 +50,7 @@ public class LabelTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Label(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -20,6 +20,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Link;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class LinkTest extends AbstractTest {
@@ -103,5 +105,6 @@ public class LinkTest extends AbstractTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Link(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
}
@@ -22,15 +22,14 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Password;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class PasswordTest extends AbstractCommonAttributesTest {
private Password tag;
public void testRenderPassword() throws Exception {
super.setUp();
this.tag = new Password(stack, request, response);
tag.setName("name");
tag.setValue("val1");
tag.setSize("10");
@@ -51,9 +50,6 @@ public class PasswordTest extends AbstractCommonAttributesTest {
}
public void testRenderPasswordShowIt() throws Exception {
super.setUp();
this.tag = new Password(stack, request, response);
tag.setName("name");
tag.setValue("val1");
tag.setSize("10");
@@ -75,7 +71,9 @@ public class PasswordTest extends AbstractCommonAttributesTest {
@Override
protected void setUp() throws Exception {
//dont call base setup
super.setUp();
this.tag = new Password(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -85,8 +83,6 @@ public class PasswordTest extends AbstractCommonAttributesTest {
@Override
protected UIBean getUIBean() throws Exception {
super.setUp();
this.tag = new Password(stack, request, response);
return tag;
}
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Reset;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class ResetTest extends AbstractCommonAttributesTest {
private Reset tag;
@@ -69,6 +71,7 @@ public class ResetTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Reset(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -21,6 +21,8 @@ package org.apache.struts2.views.java.simple;
import com.opensymphony.xwork2.security.DefaultNotExcludedAcceptedPatternsChecker;
import org.apache.struts2.components.Script;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class ScriptTest extends AbstractTest {
@@ -72,5 +74,6 @@ public class ScriptTest extends AbstractTest {
this.tag = new Script(stack, request, response);
tag.setNotExcludedAcceptedPatterns(new DefaultNotExcludedAcceptedPatternsChecker());
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
}
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Select;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
import java.util.Arrays;
import java.util.HashMap;
@@ -114,6 +116,7 @@ public class SelectTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Select(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.Submit;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class SubmitTest extends AbstractCommonAttributesTest {
private Submit tag;
@@ -154,6 +156,7 @@ public class SubmitTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Submit(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.TextArea;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class TextAreaTest extends AbstractCommonAttributesTest {
private TextArea tag;
@@ -71,6 +73,7 @@ public class TextAreaTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new TextArea(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -22,6 +22,8 @@ package org.apache.struts2.views.java.simple;
import org.apache.struts2.components.TextField;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
public class TextFieldTest extends AbstractCommonAttributesTest {
private TextField tag;
@@ -52,6 +54,7 @@ public class TextFieldTest extends AbstractCommonAttributesTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new TextField(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
}
@Override
@@ -23,6 +23,8 @@ package org.apache.struts2.views.java.simple;
import com.opensymphony.xwork2.ActionContext;
import org.apache.struts2.components.Token;
import org.apache.struts2.components.UIBean;
import org.apache.struts2.interceptor.csp.CspNonceSource;
import org.apache.struts2.interceptor.csp.StrutsCspNonceReader;
import java.util.HashMap;
import java.util.regex.Pattern;
@@ -49,6 +51,7 @@ public class TokenTest extends AbstractTest {
protected void setUp() throws Exception {
super.setUp();
this.tag = new Token(stack, request, response);
this.tag.setCspNonceReader(new StrutsCspNonceReader(CspNonceSource.SESSION.name()));
ActionContext.of()
.withSession(new HashMap<>())