I am not defining any default action. I would get the below exception if I set the ActionMapping to null. For some reason the object doesn't go away, if I set it to null. After setting it to null using request.setAttribute("struts.actionMapping", null); I can get it using getAttribute. The object remains even if I do removeAttribute.
11:57:27,509 ERROR [stderr] (default task-32) Caused by: java.lang.ClassCastException: org.apache.struts2.dispatcher.mapper.ActionMapping cannot be cast to org.apache.struts2.dispatcher.mapper.ActionMapping 11:57:27,509 ERROR [stderr] (default task-32) at org.apache.struts2.dispatcher.ng.PrepareOperations.findActionMapping(PrepareOperations.java:163) 11:57:27,509 ERROR [stderr] (default task-32) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:92) 11:57:27,509 ERROR [stderr] (default task-32) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) 11:57:27,509 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) 11:57:27,509 ERROR [stderr] (default task-32) at com.xxxxx.xxxxxx.LoginFilter.doFilter(LoginFilter.java:52) 11:57:27,509 ERROR [stderr] (default task-32) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:274) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchToPath(ServletInitialHandler.java:209) 11:57:27,510 ERROR [stderr] (default task-32) at io.undertow.servlet.spec.RequestDispatcherImpl.forwardImpl(RequestDispatcherImpl.java:221) 11:57:27,510 ERROR [stderr] (default task-32) ... 128 more Below is what I see by displaying the request.getAttribute("struts.actionMapping") after removeAttribute or after setting it to null. ActionMapping{name='Login', namespace='/', method='null', extension='action', params={}, result=null} In StrutsPrepareAndExecuteFilter below is the line that gets the action mapping, since the forceLookup is set to true the PrepareOperations class might be creating it again. ActionMapping mapping = prepare.findActionMapping(request, response, true); ---------------PrepareOperations------------------------------- public ActionMapping findActionMapping(HttpServletRequest request, HttpServletResponse response, boolean forceLookup) { ActionMapping mapping = (ActionMapping) request.getAttribute(STRUTS_ACTION_MAPPING_KEY); if (mapping == null || forceLookup) { try { mapping = dispatcher.getContainer().getInstance(ActionMapper.class).getMapping(request, dispatcher.getConfigurationManager()); if (mapping != null) { request.setAttribute(STRUTS_ACTION_MAPPING_KEY, mapping); } } catch (Exception ex) { if (dispatcher.isHandleException() || dispatcher.isDevMode()) { dispatcher.sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex); } } } return mapping; } ---------------------------------------------- Thanks, Prasanth On 03/05/2018 11:49 AM, Yasser Zamani wrote: > > On 3/5/2018 7:48 PM, Prasanth wrote: >> But the Login filter had the below lines to make sure forwarded requests >> from /context1 >> would work. >> >> request.setAttribute("struts.actionMapping", new ActionMapping()); > Please let me discuss this line first of all. I'm still surprised how > context2 app works with this line! I expect you always get > ConfigurationException or get the result of the default action. Have you > set this filter pattern to being applied only on /Login.action? If so, > still you should get ConfigurationException or get the result of the > default action (is /Login.action default?). Or maybe you have put these > two lines in an if statement like if(request has these attributes){...}? > If not, then do this please; an if statement for each line. > > Could you please try `request.setAttribute("struts.actionMapping", > null)`? then post back the exception if any (I don't expect any). You > should set to null or remove the attribute. Any other code is wrong. > > Regards. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org >