I think Tamas' point is that since a scheduled job doesn't run behind the JSecurityFilter and isn't associated with a session, it may not have a Subject based on the current session. The "run as" feature could be useful to establish a Subject by which the job should run under.

For example:
public void myScheduledTask() {
  Subject subject = securityManager.runAs( myTaskPrincipal );
  // Do my task
  subject.logout();
}

However, by putting these methods on the subject itself - it's not as clear, since there may not be any contextual (or thread local) subject associated with the scheduled task thread.

Of course, you could currently do this:
public void myScheduledTask() {
  Subject subject = securityManager.getSubject();
  subject.runAs( myTaskPrincipal );
  // Do my task
  subject.logout();
}

Any thoughts on which approach is clearer? The first approach could just be a shorthand way to do the second approach...

Jeremy



On Dec 22, 2008, at 10:35 AM, Les Hazlewood wrote:

Hi Tamás,

There should _always_ be a Subject. A scheduled task or daemon process should have a subject instance as well.

That is why the security world uses the term 'Subject' instead of 'User', since 'User' generally implies a human being. 'Subject' is general in that it encompasses any state/identity information, be it a human or daemon process or whatever...

On Mon, Dec 22, 2008 at 8:46 AM, Tamás Cservenák <[email protected]> wrote:
Hi there,

not directly related, but I have a question: all these solutions assume you already have a Subject.

What about cases when it is not the case? (ie. scheduled tasks?)

~t~


On Thu, Dec 18, 2008 at 5:28 PM, Les Hazlewood <[email protected]> wrote:
Hi JSecurity community,

The JSecurity team will enable native support for the ability to assume another user's identity at runtime, aka 'Run As' or 'Switch User' functionality into the framework very soon. This allows the application to look, feel and react as if the current user is another user entirely, a functionality that is quite common in many applications.

We're looking to the community to get feedback on what people prefer this be called in the API itself. Odds are very high that the methods to perform this switching capability will reside in the Subject interface (or a sub-interface of Subject, we haven't decided yet).

So, here are a few alphabetically-ordered options that seem to make sense (don't forget a 'principal' is just an identifying attribute, like a username or user id). If you feel so inclined, please choose one:

subject.assumeIdentity( Object principal );
subject.runAs( Object principal );
subject.switchUser( Object principal );

Please note that whatever the naming choice, the implementation will retain raw traceability and auditing attributed to the original or 'owning' user in all cases. You won't 'lose' that when executing this soon-to-be-created method.

Thanks for any feedback!

Les



--
Thanks,
~t~


Reply via email to