Riccardo Proserpio created WW-5535: -------------------------------------- Summary: HttpMethodInterceptor does not work with action names using wildcards Key: WW-5535 URL: https://issues.apache.org/jira/browse/WW-5535 Project: Struts 2 Issue Type: Bug Components: Core Interceptors Affects Versions: 7.0.0, 6.7.0 Reporter: Riccardo Proserpio
The ActionProxy.isMethodSpecified() method is documented as: {noformat} Gets status of the method value's initialization. Returns: true if the method returned by getMethod() is not a default initializer value.{noformat} However, the implementation in DefaultActionProxy has a different behavior: {code:java} private void resolveMethod() { // if the method is set to null, use the one from the configuration // if the one from the configuration is also null, use "execute" if (StringUtils.isEmpty(this.method)) { this.method = config.getMethodName(); if (StringUtils.isEmpty(this.method)) { this.method = ActionConfig.DEFAULT_METHOD; } methodSpecified = false; } } {code} methodSpecified is set to false not only if the default value is used, but also \{*}if methodName is specified via config{*}. This method seems to have been introduced long ago as a patch for some DMI behavior regression: https://issues.apache.org/jira/browse/WW-3628 The issue happens for example if you specify an action like {code:java} <action name="example-*" class="aClass" method="aMethod"/> {code} since the method value is resolved later by wildcard matching. The HttpMethodInterceptor uses isSpecifiedMethods to decide when to process the invocation: {code:java} if (invocation.getProxy().isMethodSpecified()) { Method method = action.getClass().getMethod(invocation.getProxy().getMethod()); // doIntercept... }{code} thus skipping the validation for actionNames with wildcards. I'm not really sure if isMethodSpecified is wrong or has misleading documentation. I'm not even sure why the HttpMethodInterceptor should skip validation on the default execute methods. A fix might be just assessing the existence of invocation.getProxy().getMethod() instead on relying on isMethodSpecified, but before submitting a pr I'd like the opinion on the maintainers. -- This message was sent by Atlassian Jira (v8.20.10#820010)