[ 
https://issues.apache.org/jira/browse/WW-5535?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukasz Lenart updated WW-5535:
------------------------------
    Fix Version/s: 6.8.0
                   7.1.0

> 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: 6.7.0, 7.0.0
>            Reporter: Riccardo Proserpio
>            Priority: Major
>             Fix For: 6.8.0, 7.1.0
>
>
> 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)

Reply via email to