I'm developing a web app, which utilizes struts2, shiro (for authorization), 
and openAM (for authentication/SSO).  We have several struts2 apps, which use 
openAM without shiro.  We have a couple of struts2 apps, which use shiro 
without openAM.  I'm attempting to combine them all together.

As I've been developing the application, I've gotten struts2 and shiro set up 
and working together.  We've stubbed in a development filter for supplying the 
values generally passed into the request (uid and displayName), which we put 
into the application's web.xml.  When I attempted to move the application up 
onto the server, where it would be openAM protected, we started to see weird 
things beginning to happen.  (The development filter is removed, when it's 
pushed to the test server.)  The first jsp page you hit on coming into the 
application stopped having all of its values put into the page.  Further, when 
you look at the URL, it's changed from http://server/app/index.action to 
http://server/app/jsp/home.jsp.

At first, I thought perhaps it was something screwy we had done with the 
interceptors, even though it worked in standalone mode, and the interceptors 
worked basically unchanged in the two other scenarios.  When I looked into it 
though, all of the interceptors were properly firing correctly and the values 
were coming in from openAM as expected.  I even ripped out all of the 
interceptor code we had added and shoved it into the action using the 
struts-default stack, and figured out that it doesn't appear to be an issue 
with the interceptor stack.

After downloading the source for struts,  I've traced the start of the 
differences down to what happens inside 
org.apache.struts2.dispatcher.ServletDispatcherResult:157 
(dispatcher.forward(request, response); ).  In the one running on my local 
machine, I can see it gathering values from the action inside the debug 
statements and by putting break points into the getter methods.  In the one 
running remotely, the call returns without any that stuff getting called.  As I 
traced it all the way to completion (as much as I could at least) in the 
version running on the server, I can see it pass out of the struts filters, the 
shiro filter, and the openAM Agent Filter (which is in the tomcat server's 
web.xml) down into the tomcat internals before I suddenly see all of the 
messages that I was seeing in the local version occurring inside the 
dispatcher.forward call.  (the I18nInterceptor debug messages are a good place 
to use for comparison of the two.)

2012-01-11 16:29:09,283 DEBUG 
com.opensymphony.xwork2.interceptor.I18nInterceptor.debug:68 - after 
Locale=en_US
2012-01-11 16:29:09,283 DEBUG 
com.opensymphony.xwork2.interceptor.I18nInterceptor.debug:68 - intercept }

    It seems like all of the code to initialize the values for getting shoved 
into the jsp page aren't executing until a point at which it seems like they 
would all be out of scope, but I haven't figured out either what I'm doing 
wrong or how to resolve the issue.  Does anyone have any ideas on what I've 
done wrong, how I might be able to resolve this, or ideas for where to look 
next?

Log files set to DEBUG mode:

http://people.ku.edu/~dyelar/local_instance.log (The working version without 
OpenAM running locally with the development filter.)
http://people.ku.edu/~dyelar/remote_instance.log        (The non-working 
version with OpenAM running off the protected server.)


Thanks for any help in advance,

Matthew Copeland
University of Kansas - IT
matt...@ku.edu

Reply via email to