Hi, I'm experiencing some problems in a project based on jAPS ( http://www.japsportal.org). The jAPS backend is based on Struts2. For integration with a IDM System we introduced SpringSecurity on the application. The problem is that when Struts2 is executing a result of type "chain" or of type "redirectAction" there is some problem with result. In the case of result of type chain the value (mykey) of a Spring Bean of name privateKey is used as namespace. But there is no explicit reference from action bean to privateKey bean. I suppose a problem with autowiring...
The log sais: 16:22:53,056 DEBUG DefaultWorkflowInterceptor,http-8080-6:57 - Invoking validate() on action it.prova.aps.internalservlet.domande.domandaact...@3f348a 16:22:53,057 DEBUG PrefixMethodInvocationUtil,http-8080-6:57 - cannot find method [validateSaveStep1] in action [it.prova.aps.internalservlet.domande.domandaact...@3f348a] 16:22:53,058 DEBUG PrefixMethodInvocationUtil,http-8080-6:57 - cannot find method [validateDoSaveStep1] in action [it.prova.aps.internalservlet.domande.domandaact...@3f348a] 16:22:53,059 DEBUG DefaultActionInvocation,http-8080-6:57 - Executing action method = saveStep1 16:22:53,074 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:22:53,076 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:22:53,078 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:22:53,079 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:22:53,080 DEBUG DefaultListableBeanFactory,http-8080-6:601 - Autowiring by type from bean name 'com.opensymphony.xwork2.ActionChainResult' via constructor to bean named 'privateKey' 16:22:53,085 DEBUG ActionChainResult,http-8080-6:57 - Chaining to action introStep2 16:22:53,086 DEBUG DefaultActionProxy,http-8080-6:57 - Creating an DefaultActionProxy for namespace mykey and action name introStep2 16:22:53,102 WARN Dispatcher,http-8080-6:49 - Could not find action or result There is no Action mapped for namespace mykey and action name introStep2. - [unknown location] at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:177) at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:36) at com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:221) at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:361) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:265) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.agiletec.apsadmin.system.ApsActionParamsInterceptor.intercept(ApsActionParamsInterceptor.java:63) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at it.prova.aps.internalservlet.system.I18nFrontInterceptor.intercept(I18nFrontInterceptor.java:26) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at it.prova.aps.internalservlet.system.CheckFrontUserInterceptor.intercept(CheckFrontUserInterceptor.java:19) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at it.prova.aps.internalservlet.domande.BoolFieldManagInterceptor.intercept(BoolFieldManagInterceptor.java:28) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) at com.agiletec.apsadmin.system.dispatcher.Struts2ServletDispatcher.service(Struts2ServletDispatcher.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472) at com.agiletec.aps.tags.InternalServletTag.includeShowlet(InternalServletTag.java:160) at com.agiletec.aps.tags.InternalServletTag.buildShowletOutput(InternalServletTag.java:134) at com.agiletec.aps.tags.InternalServletTag.doEndTag(InternalServletTag.java:112) at org.apache.jsp.WEB_002dINF.aps.jsp.showlets.formAction_jsp._jspx_meth_wp_005finternalServlet_005f0(formAction_jsp.java:85) at org.apache.jsp.WEB_002dINF.aps.jsp.showlets.formAction_jsp._jspService(formAction_jsp.java:62) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472) at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968) at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:611) at com.agiletec.aps.tags.ExecShowletTag.includeShowlet(ExecShowletTag.java:107) at com.agiletec.aps.tags.ExecShowletTag.buildShowletOutput(ExecShowletTag.java:84) at com.agiletec.aps.tags.ExecShowletTag.doEndTag(ExecShowletTag.java:58) at org.apache.jsp.WEB_002dINF.aps.jsp.system.main_jsp._jspx_meth_wp_005fexecShowlet_005f0(main_jsp.java:116) at org.apache.jsp.WEB_002dINF.aps.jsp.system.main_jsp._jspService(main_jsp.java:70) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at com.agiletec.aps.system.services.controller.control.Executor.service(Executor.java:57) at com.agiletec.aps.system.services.controller.ControllerManager.service(ControllerManager.java:73) at com.agiletec.aps.servlet.ControllerServlet.service(ControllerServlet.java:56) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378) at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:67) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:278) at com.agiletec.plugins.jprasidm.aps.system.services.controller.control.MySAMLProcessingFilter.doFilterHttp(MySAMLProcessingFilter.java:37) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.saml.metadata.MetadataDisplayFilter.doFilterHttp(MetadataDisplayFilter.java:90) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.saml.SAMLEntryPoint.doFilterHttp(SAMLEntryPoint.java:102) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at com.prova.springframework.security.saml.SAMLLogoutFilter.doFilterHttp(SAMLLogoutFilter.java:162) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at com.prova.springframework.security.saml.SAMLLogoutProcessingFilter.doFilterHttp(SAMLLogoutProcessingFilter.java:163) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.concurrent.ConcurrentSessionFilter.doFilterHttp(ConcurrentSessionFilter.java:99) at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53) at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390) at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619) In the case of result of type ServletRedirectResult the value (mykey) of a Spring Bean of name privateKey is used as method name (I suppose for syntax actionName!methodName). But there is no explicit reference from action bean to privateKey bean. I suppose, also here, a problem with autowiring... The log for this is: 16:46:34,322 DEBUG DefaultActionProxy,http-8080-6:57 - Creating an DefaultActionProxy for namespace /do and action name main 16:46:34,324 DEBUG DefaultListableBeanFactory,http-8080-6:383 - Creating instance of bean 'dispatchAction' 16:46:34,326 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'LangManager' 16:46:34,346 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'AuthorizationManager' 16:46:34,347 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'AuthenticationProviderManager' 16:46:34,348 DEBUG DefaultListableBeanFactory,http-8080-6:411 - Finished creating instance of bean 'dispatchAction' 16:46:34,351 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'AuthorizationManager' 16:46:34,357 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:46:34,361 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:46:34,370 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'privateKey' 16:46:34,371 DEBUG DefaultListableBeanFactory,http-8080-6:601 - Autowiring by type from bean name 'org.apache.struts2.dispatcher.ServletActionRedirectResult' via constructor to bean named 'privateKey' 16:46:34,397 DEBUG ServletRedirectResult,http-8080-6:57 - Redirecting to finalLocation /axan/do/login!mykey.action 16:46:34,403 DEBUG InstantiatingNullHandler,http-8080-6:57 - Entering nullPropertyValue [target=[com.opensymphony.xwork2.defaulttextprovi...@1e6661], property=struts] 16:46:34,403 DEBUG DefaultActionProxy,http-8080-6:57 - Creating an DefaultActionProxy for namespace /do and action name login 16:46:34,405 DEBUG I18nInterceptor,http-8080-6:57 - intercept '/do/login' { 16:46:34,407 DEBUG I18nInterceptor,http-8080-6:57 - before Locale=en_EN 16:46:34,439 DEBUG InstantiatingNullHandler,http-8080-6:57 - Entering nullPropertyValue [target=[com.opensymphony.xwork2.actionsupp...@d861b7, com.opensymphony.xwork2.defaulttextprovi...@1e6661], property=struts] 16:46:34,445 DEBUG FileUploadInterceptor,http-8080-6:57 - Bypassing /do/login 16:46:34,446 DEBUG StaticParametersInterceptor,http-8080-6:57 - Setting static parameters {} 16:46:34,446 DEBUG ParametersInterceptor,http-8080-6:57 - Setting params NONE 16:46:34,446 DEBUG ParametersInterceptor,http-8080-6:57 - Setting params 16:46:34,550 DEBUG DefaultListableBeanFactory,http-8080-6:214 - Returning cached instance of singleton bean 'BaseConfigManager' Any suggestion will be appreciated, I don't understand why bean privateKey is autowired and why only it. The bean definition is: <!-- Alias of the key used for SAML signing and encryption/decryption --> <beans:bean name="privateKey" class="java.lang.String"> <beans:constructor-arg value="mykey" /> </beans:bean> Thank you.