This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 10e135608 Automatic Site Publish by Buildbot
10e135608 is described below

commit 10e1356088c8c880c42166acd95a4d95d71b6228
Author: buildbot <[email protected]>
AuthorDate: Wed Jul 29 07:05:26 2026 +0000

    Automatic Site Publish by Buildbot
---
 output/core-developers/chaining-interceptor.html | 25 ++++++++++++++++++++++++
 output/core-developers/default-properties.html   |  9 +++++++++
 2 files changed, 34 insertions(+)

diff --git a/output/core-developers/chaining-interceptor.html 
b/output/core-developers/chaining-interceptor.html
index 01682f93c..23a0ef8de 100644
--- a/output/core-developers/chaining-interceptor.html
+++ b/output/core-developers/chaining-interceptor.html
@@ -210,6 +210,31 @@ no properties are copied.</li>
   <li>This is a <strong>global</strong> constant only — there is no 
per-interceptor override.</li>
 </ul>
 
+<h2 id="security-considerations">Security Considerations</h2>
+
+<p>Action chaining makes the data path into the target action implicit: the 
target is populated
+from whatever happens to be on the value stack rather than from an explicit 
call. Keep that in
+mind when designing chained actions:</p>
+
+<ul>
+  <li><strong>Do not carry authorization, trust, identity, or approval state 
across a chain.</strong> Re-derive
+such state from the session or your security context inside the target action, 
so it never
+depends on what a previous action left on the stack.</li>
+  <li><strong>Prefer avoiding chaining where practical.</strong> It couples 
the two actions together and makes
+the target’s inputs harder to reason about; a shared service or an explicit 
redirect is
+usually clearer.</li>
+  <li><strong>If chaining is required, narrow what is copied.</strong> 
Implement
+<a 
href="/maven/struts2-core/apidocs/org/apache/struts2/Unchainable">Unchainable</a>
 on objects that must
+never be copied from, and use the interceptor’s <code 
class="language-plaintext highlighter-rouge">includes</code> or <code 
class="language-plaintext highlighter-rouge">excludes</code> parameters to limit
+the copied properties to the ones the target genuinely needs.</li>
+  <li><strong>Do not expose a public setter on the target action for state 
that must not be settable from
+outside that action.</strong> Anything with a public setter is, by design, 
part of the action’s
+input surface.</li>
+</ul>
+
+<p>See also <a 
href="struts-parameter-annotation.html#where-authorization-applies">Where 
authorization applies</a>
+for an overview of the channels that can populate an action.</p>
+
 <h2 id="parameters">Parameters</h2>
 
 <ul>
diff --git a/output/core-developers/default-properties.html 
b/output/core-developers/default-properties.html
index 148170a28..8b3f4d106 100644
--- a/output/core-developers/default-properties.html
+++ b/output/core-developers/default-properties.html
@@ -235,7 +235,10 @@ struts.multipart.parser=jakarta
 ### Uses jakarta.servlet.context.tempdir by default
 struts.multipart.saveDir=
 struts.multipart.maxSize=2097152
+# Maximum number of uploaded files (files only, not form fields)
 struts.multipart.maxFiles=256
+# Maximum number of non-file form fields (parameters)
+struts.multipart.maxParameterCount=256
 struts.multipart.maxStringLength=4096
 # struts.multipart.maxFileSize=
 
@@ -314,6 +317,12 @@ struts.mapper.action.prefix.crossNamespaces = false
 ###                them right away.
 struts.devMode = false
 
+### When set to true, a field's remaining validators are skipped once that 
field
+### has a type conversion error, avoiding a duplicate error (WW-2934).
+### The field's own conversion validator still runs, so its message is still 
shown.
+### valid values are: true, false (false is the default)
+struts.validators.skipValidatorsOnConversionError = false
+
 ### when set to true, resource bundles will be reloaded on _every_ request.
 ### this is good during development, but should never be used in production
 # struts.i18n.reload=false

Reply via email to