Hi Alex,

The easiest way to do this is to construct the Subject instance
associated with the session given to the listener:

Subject owningSubject = new
Subject.Builder().session(theSession).buildSubject();

You can interact with the 'owningSubject' instance to acquire what you
need (e.g. owningSubject.getPrincipal()).

This way, you don't need to know about the implementation details of
how to acquire the principals (i.e. what session key to use, etc).
This is good because those implementation details might change over
time, but your code based on the Subject.Builder should always work
the same way.

Cheers,

Les Hazlewood
CTO, Stormpath | http://www.stormpath.com | 888.391.5282
twitter: @lhazlewood | http://twitter.com/lhazlewood
blog: http://leshazlewood.com
stormpath blog: http://www.stormpath.com/blog/

On Thu, Apr 5, 2012 at 12:34 PM, Alex Vasilenko <[email protected]> wrote:
> Hello,
>
> Is there any simple solution to retrieve user's principals in
> SessionListener? As far as I understand it's abstracted from subject and
> there's no way to get it simply w/o hacking into shiro code.
>
> Why do I need this:
> We have pretty common use-case: show users, who are online. With
> SessionListener it would be quite easy - #onStart() mark user as online,
>  #onExpiration() and #onStop() - as offline.
>
> Thanks,
> Alexandr Vasilenko
>

Reply via email to