Vadim Gritsenko wrote:

>>From: Sylvain Wallez [mailto:[EMAIL PROTECTED]]
>>
>>Vadim Gritsenko wrote:
>>
<snip/>

>>But the servlet spec doesn't allow a servlet to set the user
>>credential in the container.
>>
>
>It will be set for you by the container.
>
There'a misunderstanding here : if authentication is performed by an 
Action, the container has already given us a request, and we cannot give 
it back the user info computed by this action.

>Servlet spec 2.3, SRV.12.5.3 Form Based Authentication:
>  4. The container attempts to authenticate the user
>  using the information from the form.
>
>If you want to do this by yourself, then yes, it is not specified in the
>spec how to do this. But spec implementations usually provide you with
>the (non-statndard) way to handle this correctly (i.e. it will propagate
>Principal you provided into the container). I remember some examples
>from the Bea WebLogic server.
>
That's precisely what I'd like to avoid : write an authenticator for 
each and every servlet engine my app has to run on, including those I 
know nothing about :(

This is IMHO a major problem in J2EE. Could JAAS help here ?

>>A thing I already though of about request locale: as Cocoon abstracts
>>the environment, couldn't we "open" the request interface by adding
>>setter methods that allows wrappers to return values set by Cocoon.
>>
>>To be clear :
>>in Environment :
>>  Principal getUserPrincipal();
>>  setUserPrincipal(Principal user);
>>
>>in HttpEnvironment :
>>  Principal userPrincipal = null;
>>
>>  public void setUserPrincipal(Principal p) {
>>    this.userPrincipal = p;
>>  }
>>
>>  public Principal getUserPrincipal() {
>>    if (this.userPrincipal == null) {
>>      return this.userPrincipal;
>>    } else {
>>      return this.httpRequest.getUserPrincipal();
>>    }
>>  }
>>
>>This would allow Action-based authenticator to set the User
>>transparently to other components. The same could apply to
>>getLocale(), which could be overriden by the LocaleAction.
>>
>
>Not good; This would not be propagated to the other environments, say,
>into an EJB. Not to say that this is against any standards Java has.
>And, same could be done using session:
>
>   public Principal getUserPrincipal() {
>     if (session.getAttribute("userPrincipal") == null) {
>       return request.userPrincipal;
>     } else {
>       return session.getAttribute("userPrincipal");
>     }
>   }
>
Do you mean this code could be the one in Cocoon's Request object ? 
Well, this avoids adding a setter, but the session then becomes a 
"hidden setter". And this changes nothing for EJBs.

BTW, Servlet 2.3 introduces Filters what allow wrapping of the Request 
and Response :
- what if a request wrapper changes the result of getUserPrincipal ? 
Will it be propagated to EJBs ?
- shouldn't we have something similar in our abstracted environment ?

Sylvain

-- 
Sylvain Wallez
Anyware Technologies - http://www.anyware-tech.com




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to