I wonder if it's possible in HttpSessionListener implementation get
access to actual Tomcat's StandardSession?
HttpSessionEvent contains reference to StandardSessionFacade.

Otherwise I cannot access Manager, Context etc which should led me to
SingleSignOn.

Should I go through dangerous reflection ways or there are some
'recommended' ways to access the internals?
Thanks.

On Thu, Jan 29, 2015 at 1:25 PM, Leonid Rozenblyum
<lrozenbl...@gmail.com> wrote:
> Thanks for the great advice!
>
> On Thu, Jan 29, 2015 at 12:57 PM, Mark Thomas <ma...@apache.org> wrote:
>> On 29/01/2015 10:54, Leonid Rozenblyum wrote:
>>> Hello! I'm trying to extend the SingleSignOn valve and if possible
>>> could you point me how can I create a global session listener
>>> without modifying configurations of web applications?
>>>
>>> The idea is that I should catch all 'session create' events from all
>>> webapps, and if they have the 'custom SSO valve' as parent - add them
>>> to SSO irregardless the fact the have no authentication themselves.
>>>
>>> Thanks for any help!
>>
>> Put your listener in conf/web.xml. That file is applied to all web
>> applications.
>>
>> Mark
>>
>>
>>>
>>> On Thu, Jan 22, 2015 at 9:44 PM, Leonid Rozenblyum
>>> <lrozenbl...@gmail.com> wrote:
>>>> Hello Mark!
>>>>
>>>> I'll investigate deeper the SingleSignOn class to understand how to
>>>> extend it to allow adding the session always.
>>>>
>>>>
>>>> To summarize : my understanding of current behaviour is following:
>>>>
>>>> - if a web application uses authentication (has security-constraint?)
>>>> -> then SingleSignOn will provide :
>>>> a) correct request.getUserPrincipal()
>>>> b) correct session invalidation
>>>>
>>>> - if a web application is not using authentication -> SingleSignOn
>>>> will just provide
>>>> a) correct request.getUserPrincipal()
>>>>
>>>> Probably there were some logical architectural backgrounds to take
>>>> this decision
>>>>
>>>> But for us it was counter-intuitive. We expected either a)+b) are both
>>>> available or nothing.
>>>>
>>>> Presence of just a) caused unexpected security issues in our app when
>>>> after logout and logging in with lower permissions user had access to
>>>> data stored for high-privileged user.
>>>>
>>>> Thanks for your help!
>>>>
>>>> On Thu, Jan 22, 2015 at 7:12 PM, Mark Thomas <ma...@apache.org> wrote:
>>>>> On 22/01/2015 16:25, Leonid Rozenblyum wrote:
>>>>>> So doesn't "As soon as the user logs out of one web application (for
>>>>>> example, by invalidating the corresponding session if form based login
>>>>>> is used), the user's sessions in all web applications will be
>>>>>> invalidated. " ( this phrase is from official doc) imply that all
>>>>>> sessions are invalidated and thus attributes are cleared?
>>>>>>
>>>>>> (and as I mentioned above : there is some workaround that looks like
>>>>>> forces Tomcat to work exactly like this).
>>>>>
>>>>> A session is only added to SSO if the web application uses
>>>>> authentication. You could extend the SSOValve to always add the session
>>>>> if you wish.
>>>>>
>>>>> Mark
>>>>>
>>>>>
>>>>>>
>>>>>> On Thu, Jan 22, 2015 at 6:21 PM, Mark Thomas <ma...@apache.org> wrote:
>>>>>>> On 22/01/2015 16:12, Leonid Rozenblyum wrote:
>>>>>>>> Probably the attachment will be cut out by the mailing server.
>>>>>>>> So I send the text of the test.jsp here:
>>>>>>>>
>>>>>>>> Hello
>>>>>>>> <br />
>>>>>>>> User Principal: <%= request.getUserPrincipal() %> <br/>
>>>>>>>>
>>>>>>>> <%
>>>>>>>> if (request.getUserPrincipal() != null ) {
>>>>>>>> %>
>>>>>>>> User is authenticated, allow to set session attribute
>>>>>>>> <%
>>>>>>>> request.getSession().setAttribute("markerAttribute", 
>>>>>>>> "markerAttributeValue");
>>>>>>>> }
>>>>>>>> else {
>>>>>>>> %>
>>>>>>>> User is a guest. No setting of any session attributes.
>>>>>>>> <%
>>>>>>>>   }
>>>>>>>> %>
>>>>>>>
>>>>>>> You need to remove the session attribute if the user is not 
>>>>>>> authentication.
>>>>>>>
>>>>>>> Tomcat's SSO is working as expected. You are, of course, free to
>>>>>>> extend/patch it if you prefer.
>>>>>>>
>>>>>>> Mark
>>>>>>>
>>>>>>>>
>>>>>>>> <br />
>>>>>>>>
>>>>>>>> Marker Attribute from session: <%=
>>>>>>>> request.getSession().getAttribute("markerAttribute") %>
>>>>>>>>
>>>>>>>> On Thu, Jan 22, 2015 at 5:51 PM, Leonid Rozenblyum
>>>>>>>> <lrozenbl...@gmail.com> wrote:
>>>>>>>>> I think I could reproduce my problem also on experimenting with your 
>>>>>>>>> examples!
>>>>>>>>>
>>>>>>>>> I went exactly by your steps but my JSP is an extended version of
>>>>>>>>> yours ( I add it to attachment )
>>>>>>>>>
>>>>>>>>> In the ROOT/test.jsp I added code to set a session attribute if the
>>>>>>>>> user principal is not null.
>>>>>>>>> I expect that after logging out via another application (using SSO) my
>>>>>>>>> session attribute won't be there (my expectation of SingleSignOff is
>>>>>>>>> complete session invalidation).
>>>>>>>>>
>>>>>>>>> However it's not the case : after logging out in security/protected
>>>>>>>>> the session attribute is still kept (while UserPrincipal is null).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Complete scenario:
>>>>>>>>>
>>>>>>>>> - request ROOT/test.jsp
>>>>>>>>>   - no authenticated user
>>>>>>>>>   - no marker attribute in session
>>>>>>>>>
>>>>>>>>> - request examples/jsp/security/protected
>>>>>>>>>   - FORM login prompt, login, see index.jsp
>>>>>>>>>
>>>>>>>>> - request ROOT/test.jsp
>>>>>>>>>   - shows user authenticated above. SSO cookie has a path of / so gets
>>>>>>>>>     returned with all requests. This exposes the UserPrincipal to all
>>>>>>>>>     apps
>>>>>>>>>   - marker attribute is shown from session.
>>>>>>>>>
>>>>>>>>> - request examples/jsp/security/protected
>>>>>>>>>   - see index.jsp
>>>>>>>>>   - click logout
>>>>>>>>>   - see FORM login page
>>>>>>>>>
>>>>>>>>> - request ROOT/test.jsp
>>>>>>>>>   - no authenticated user. As expected. Logout above has destroyed SSO
>>>>>>>>>     session and removed SSO cookie
>>>>>>>>>
>>>>>>>>> However - the marker attribute is STILL in session of ROOT 
>>>>>>>>> webapplication.
>>>>>>>>> For us it means that the session is NOT invalidated correctly.
>>>>>>>>>
>>>>>>>>> Thanks for your feedback and detail scenario you sent, I think it
>>>>>>>>> helped discover a probable bug...
>>>>>>>>>
>>>>>>>>> On Wed, Jan 21, 2015 at 7:06 PM, Leonid Rozenblyum
>>>>>>>>> <lrozenbl...@gmail.com> wrote:
>>>>>>>>>> Hello!
>>>>>>>>>> I tried 8.0.17 (previously I had 8.0.15) and we still have the same
>>>>>>>>>> problem with same possible workaround.
>>>>>>>>>>
>>>>>>>>>> I'll go through your examples, try them and compare what's the 
>>>>>>>>>> difference.
>>>>>>>>>>
>>>>>>>>>> On Tue, Jan 20, 2015 at 11:52 AM, Mark Thomas <ma...@apache.org> 
>>>>>>>>>> wrote:
>>>>>>>>>>> On 20/01/2015 08:10, Leonid Rozenblyum wrote:
>>>>>>>>>>>> Thank you, Mark!
>>>>>>>>>>>
>>>>>>>>>>> I spent some time stepping through the code using a default Tomcat
>>>>>>>>>>> install with the following changes:
>>>>>>>>>>> - SSO Valve uncommented in server.xml
>>>>>>>>>>> - test.jsp added to ROOT app that shows request.getUserPrincipal
>>>>>>>>>>> - uncomment user definitions in tomcat-users.xml
>>>>>>>>>>>
>>>>>>>>>>> Note that the examples app ships with a protected page that requires
>>>>>>>>>>> authentication.
>>>>>>>>>>>
>>>>>>>>>>> I see the following:
>>>>>>>>>>>
>>>>>>>>>>> - request ROOT/test.jsp
>>>>>>>>>>>   - no authenticated user
>>>>>>>>>>>
>>>>>>>>>>> - request examples/jsp/security/protected
>>>>>>>>>>>   - FORM login prompt, login, see index.jsp
>>>>>>>>>>>
>>>>>>>>>>> - request ROOT/test.jsp
>>>>>>>>>>>   - shows user authenticated above. SSO cookie has a path of / so 
>>>>>>>>>>> gets
>>>>>>>>>>>     returned with all requests. This exposes the UserPrincipal to 
>>>>>>>>>>> all
>>>>>>>>>>>     apps
>>>>>>>>>>>
>>>>>>>>>>> - request examples/jsp/security/protected
>>>>>>>>>>>   - see index.jsp
>>>>>>>>>>>   - click logout
>>>>>>>>>>>   - see FORM login page
>>>>>>>>>>>
>>>>>>>>>>> - request ROOT/test.jsp
>>>>>>>>>>>   - no authenticated user. As expected. Logout above has destroyed 
>>>>>>>>>>> SSO
>>>>>>>>>>>     session and removed SSO cookie
>>>>>>>>>>>
>>>>>>>>>>> So, in short, I am seeing the behaviour you expect to see. I'm doing
>>>>>>>>>>> this with 9.0.x (trunk) but that should be the same as the latest 
>>>>>>>>>>> 80.x
>>>>>>>>>>> release.
>>>>>>>>>>>
>>>>>>>>>>> A couple of things to check:
>>>>>>>>>>> - are you using the latest 8.0.x release (8.0.17 - I need to send 
>>>>>>>>>>> out
>>>>>>>>>>>   the announcement)
>>>>>>>>>>> - Turn on debug logging for the Host where you added the SSO valve 
>>>>>>>>>>> - you
>>>>>>>>>>>   should see debug messages from the SSO valve which will show when
>>>>>>>>>>>   sessions get created, destroyed etc.
>>>>>>>>>>>
>>>>>>>>>>> Mark
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Jan 20, 2015 at 12:18 AM, Mark Thomas <ma...@apache.org> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> On 16/01/2015 14:05, Leonid Rozenblyum wrote:
>>>>>>>>>>>>>> Hello Mark.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> We do explicit forced expiration of http session in one of SSO 
>>>>>>>>>>>>>> enabled
>>>>>>>>>>>>>> apps (Application1 : session.invalidate() )
>>>>>>>>>>>>>> and it didn't cause session expiration in other Apps
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> (only workaround with adding security-constraint to other apps 
>>>>>>>>>>>>>> that I
>>>>>>>>>>>>>> mentioned above helped).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Tomcat version is 8.0.15. OS tested was both linux & windows
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Probably I need to prepare minimal test case since it looks like 
>>>>>>>>>>>>>> a bug, right?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yes to the possible bug. Thanks but no need at this point for the 
>>>>>>>>>>>>> test
>>>>>>>>>>>>> case. I'll take a look at what is going on.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Mark
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Fri, Jan 16, 2015 at 2:53 PM, Mark Thomas <ma...@apache.org> 
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> On 15/01/2015 15:46, Leonid Rozenblyum wrote:
>>>>>>>>>>>>>>>> Hello.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I have > 2 web-applications which are running on the same host.
>>>>>>>>>>>>>>>> The Valve SingleSignOn is enabled.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Application1 has security-constraint and login-config elements 
>>>>>>>>>>>>>>>> in web.xml
>>>>>>>>>>>>>>>> Application2, 3 etc has no such definitions
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Technically Application1 is acting as a security gate. All 
>>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>> applications are redirected to it if userPrincipal is not 
>>>>>>>>>>>>>>>> found.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> In this scenario Single Sign ON works fine - after 
>>>>>>>>>>>>>>>> authenticating in
>>>>>>>>>>>>>>>> Application1, all other applications have correction 
>>>>>>>>>>>>>>>> userPrincipal.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> However Single Sign OFF doesn't work in this configuration. If 
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>> logout in App1, other sessions are not invalidated.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> How can this be overcomed? Is it a bug or works-as-intended?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Explicit, forced expiration of the HTTP session in any SSO 
>>>>>>>>>>>>>>> enabled web
>>>>>>>>>>>>>>> application should destroy the SSO session and in turn trigger 
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> expiration of the HTTP session for every other SSO enabled web 
>>>>>>>>>>>>>>> application.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Session expiration due to timeout in an SSO enabled web 
>>>>>>>>>>>>>>> application only
>>>>>>>>>>>>>>> terminates the HTTP session for that web application. The SSO 
>>>>>>>>>>>>>>> session is
>>>>>>>>>>>>>>> unaffected (unless this was the last HTTP session associated 
>>>>>>>>>>>>>>> with the
>>>>>>>>>>>>>>> SSO session in which case the SSO session is removed).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Mark
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>>>>>
>>>>>>>>
>>>>>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
>> For additional commands, e-mail: users-h...@tomcat.apache.org
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to