Thanks Phil, yes the workaround works.
Following is my web mapping declaration.
<web:mapping>
<web:to-module prefix="/useradmin" setContextPath="true" />
<web:to-handler extension="[none]" servletName="myapp-useradmin"
filterNames="encoding-filter,loginFilter" />
<web:to-handler extension="html" servletName="useradmin-
dispatcher"filterNames="encoding-filter,loginFilter" />
<web:to-handler extension="css" servletName="resources"
filterNames="loginFilter" />
<web:to-handler extension="jsp" servletName="useradmin-jsp"
filterNames="loginFilter" />
</web:mapping>
1. I invoke
http://localhost:8080/myapp-host/useradmin/login.html that
looks for a tiles view by looking up resource /myapp-host/templates/
main.jsp which doesnt exist as the main.jsp is in useradmin module.
Relevant stack and details are as follows
a. Initial request ( /login.html) is processed by ModuleProxyFilter
and then passed on to ModuleHttpServiceInvoker which invokes filter
chain.
b. This triggers loginFilter leading to spring security to wrap
requests.
c. The call stack process to InternalModuleServlet.render() which
invokes DynamicTilesView.render()
d. This leads to dispatcher servlet issuing a forward request for
resource /templates/main.jsp
e. This forward request is again processed by ModuleProxyFilter -
>CompositeRequestModuleMapper->UrlPrefixRequestModuleMapper which is
not able to utilize SecurityContextHolderAwareRequestWrapper as its
not an instance of ModuleHttpServletRequest .
It appears that the forward request is being re-processed by
ModuleProxyFilter, did I make some configuration mistake? Following is
the relevant stack, let me know if you want me to post entire
configuration/stack.
=========================================================================================================================
UrlPrefixRequestModuleMapper.getModuleForRequest(HttpServletRequest)
line: 59
CompositeRequestModuleMapper.getModuleForRequest(HttpServletRequest)
line: 46
ModuleProxyFilter(BaseModuleProxyFilter).getModuleMapping(HttpServletRequest)
line: 92
ModuleProxyFilter(BaseModuleProxyFilter).doFilter(HttpServletRequest,
HttpServletResponse, ServletContext, FilterChain) line: 68
ModuleProxyFilter(BaseLockingProxyFilter).doFilter(ServletRequest,
ServletResponse, FilterChain) line: 77
ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse)
line: 1157
....
Dispatcher.forward(ServletRequest, ServletResponse, int) line: 327
Dispatcher.forward(ServletRequest, ServletResponse) line: 126
ServletTilesRequestContext.forward(String) line: 241
......
SecurityContextHolderAwareRequestFilter.doFilter(ServletRequest,
ServletResponse, FilterChain) line: 54
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest,
ServletResponse) line: 380
RequestCacheAwareFilter.doFilter(ServletRequest, ServletResponse,
FilterChain) line: 35
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest,
ServletResponse) line: 380
BasicAuthenticationFilter.doFilter(ServletRequest, ServletResponse,
FilterChain) line: 177
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest,
ServletResponse) line: 380
UsernamePasswordAuthenticationFilter(AbstractAuthenticationProcessingFilter).doFilter(ServletRequest,
ServletResponse, FilterChain) line: 187
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest,
ServletResponse) line: 380
LogoutFilter.doFilter(ServletRequest, ServletResponse, FilterChain)
line: 105
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest,
ServletResponse) line: 380
SecurityContextPersistenceFilter.doFilter(ServletRequest,
ServletResponse, FilterChain) line: 79
FilterChainProxy$VirtualFilterChain.doFilter(ServletRequest,
ServletResponse) line: 380
FilterChainProxy.doFilter(ServletRequest, ServletResponse,
FilterChain) line: 169
LoginFilter(BaseDelegatingFilterProxy).invokeDelegate(Filter,
ServletRequest, ServletResponse, FilterChain) line: 97
LoginFilter(BaseDelegatingFilterProxy).doFilter(ServletRequest,
ServletResponse, FilterChain) line: 58
InvocationChain.invoke(HttpServletRequest, HttpServletResponse,
FilterChain) line: 85
InvocationChain.doFilter(ServletRequest, ServletResponse) line: 97
CharacterEncodingFilter.doFilterInternal(HttpServletRequest,
HttpServletResponse, FilterChain) line: 88
CharacterEncodingFilter(OncePerRequestFilter).doFilter(ServletRequest,
ServletResponse, FilterChain) line: 76
InvocationChain.invoke(HttpServletRequest, HttpServletResponse,
FilterChain) line: 85
ModuleHttpServiceInvoker.invoke(HttpServletRequest,
HttpServletResponse, FilterChain) line: 116
ModuleProxyFilter(ModuleProxyFilter).processMapping(ServletContext,
HttpServletRequest, HttpServletResponse, FilterChain,
RequestModuleMapping, String) line: 70
ModuleProxyFilter(BaseModuleProxyFilter).doFilter(HttpServletRequest,
HttpServletResponse, ServletContext, FilterChain) line: 72
ModuleProxyFilter(BaseLockingProxyFilter).doFilter(ServletRequest,
ServletResponse, FilterChain) line: 77
ServletHandler$CachedChain.doFilter(ServletRequest, ServletResponse)
line: 1157
ServletHandler.handle(String, HttpServletRequest, HttpServletResponse,
int) line: 388
SecurityHandler.handle(String, HttpServletRequest,
HttpServletResponse, int) line: 216
SessionHandler.handle(String, HttpServletRequest, HttpServletResponse,
int) line: 182
WebAppContext(ContextHandler).handle(String, HttpServletRequest,
HttpServletResponse, int) line: 765
WebAppContext.handle(String, HttpServletRequest, HttpServletResponse,
int) line: 418