[ 
https://issues.apache.org/jira/browse/WW-5534?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17932796#comment-17932796
 ] 

Kusal Kithul-Godage commented on WW-5534:
-----------------------------------------

This fix has been merged for Struts 7.1. It also includes support for Spring 
CGLIB proxies in the OGNL allowlist so you will no longer need to manually 
allowlist your Action package either.

> Actions with Spring's @Transactional and ModelDriven
> ----------------------------------------------------
>
>                 Key: WW-5534
>                 URL: https://issues.apache.org/jira/browse/WW-5534
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Interceptors, Plugin - Spring
>    Affects Versions: 7.0.0
>            Reporter: Johannes Mayer
>            Priority: Minor
>             Fix For: 7.1.0
>
>          Time Spent: 3h 20m
>  Remaining Estimate: 0h
>
> Hi,
> When using the ModelDriven interface, the getModel method has to be annotated 
> with {_}@StrutsParameter{_}.
> When Spring decides to wrap an Action object with SpringCGLIB (e.g. when 
> annotating a method with {_}@Transactional){_}, one has to add the Package to 
> the allowList, so execute can be called. No harm done, just add this to the 
> {_}struts.xml{_}:
> {code:java}
> <constant name="struts.allowlist.packageNames" value="your.action.package"/> 
> {code}
> The now emerging problem is, that  
> _org.apache.struts2.interceptor.parameter.ParametersInterceptor_ is not able 
> to map the request parameter to the model, because it is not able to find a 
> suitable _getModel_ method. The reason for this is, that the interceptor is 
> trying to find the annotation on the SpringCGLIB class, which does not work.
> As a workaround, I can tell the ParameterInterceptor to not need a 
> _@StrutsParameter_ annotation, but imo that defeats the purpose of this 
> annotation. I am also warned not to make this configuration. I therefore 
> assume that this scenario is not desirable.
> {code:java}
> <constant name="struts.parameters.requireAnnotations" value="false" /> {code}
> Spring's AopUtils gives the option the get to the real class: 
> _AopUtils.getTargetClass(springCGLIBObject);_
> I created a project to showcase this: 
> [https://github.com/sf-JMA/struts7-model-driven/|https://github.com/sf-JMA/struts7-model-driven/tree/main/src/main]
> I added a test 
> [https://github.com/sf-JMA/struts7-model-driven/blob/main/src/test/java/com/steadforce/aek/struts7modeldriven/SpringAopVersusModelDrivenTest.java]
>  to show the AopUtils method.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to