-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Leonid,

On 6/11/15 4:18 AM, Leonid Rozenblyum wrote:
> Hello. Just to double-check. By writing own login-handler, do you
> mean, overriding FormAuthenticator.authenticate() (looks risky
> since it's a big method which can change from one to another Tomcat
> version)?
> 
> Or are there more painless ways to inject such custom login
> handler?
> 
> On Thu, May 28, 2015 at 6:49 PM, Christopher Schultz 
> <ch...@christopherschultz.net> wrote: Mark,
> 
> On 5/28/15 5:29 AM, Mark Thomas wrote:
>>>> On 28/05/2015 10:22, Leonid Rozenblyum wrote:
>>>>> Hello experts.
>>>>> 
>>>>> We are using FormAuthenticator and face a following issue:
>>>>> 
>>>>> 1) Session persistence is disabled 2) User is on login page
>>>>> 3) Restart Tomcat 4) User tries authentication
>>>>> 
>>>>> He receives error 400 or 408.
>>>>> 
>>>>> While digging deeper we discovered that in this case
>>>>> Tomcat validates session id and if it's old/invalid -
>>>>> prevents logging-in even though valid credentials are
>>>>> passed.
>>>>> 
>>>>> We tried landingPage solution - it looks better than error 
>>>>> 400/408 but anyway it forces user to enter credentials
>>>>> twice (or we don't know how to pass credentials to
>>>>> landingPage implicitly).
>>>>> 
>>>>> We think that an improvement of user experience would be :
>>>>> 
>>>>> FormAuthenticator: 255 if (session == null) { session = 
>>>>> request.getSessionInternal(false); }
>>>>> 
>>>>> ==> if (session == null) { session = 
>>>>> request.getSessionInternal(true); }
>>>>> 
>>>>> So if session is invalid or missing - simply create it.
>>>>> 
>>>>> Does this idea make sense?
>>>> 
>>>> No. It makes no sense at all.
>>>> 
>>>>> Can we achieve the goal of not forcing user entering
>>>>> credentials twice without changes in Tomcat ?
>>>> 
>>>> No. The credentials are stored in the session. If you
>>>> restart Tomcat with session persistence disabled those
>>>> credentials are lost and the user is going to have to
>>>> re-enter them.
> 
> I think the OP is saying that the credentials are only entered a 
> single time. The Tomcat restart between showing and submitting the 
> login page is the source of the problem.
> 
> Leonid, the servlet spec is very clear about the workflow for 
> authentication: the client must request a protected resource, then
> the container challenges the client for authentication (shows the
> login page), and then the client must submit valid credentials
> (send a request to j_security_check). After that, the container
> must re-process the client's original request with the
> newly-authenticated principal.
> 
> Tomcat stores the original request in the session. If you lose
> your session between presenting the login page and submitting the 
> credentials, Tomcat has no way to re-process the original request.
> 
> IMO, this is a hole in the spec, because it doesn't allow people
> to login simply because they want to; instead, they must first
> attempt to reach a protected resource.
> 
> If you want your users to be able to login without requesting a 
> protected resource, you may write your own login-handler and call 
> ServletRequest.login(). That way, you won't require a session to
> exist during that whole workflow.
> 
> -chris

No, I was suggesting that you write your own servlet or filter that
handles your logins. Instead of pointing your login form at
/j_security_check, you point it at /your/login/servlet and then call
Request.login() yourself. That way, you can decide what to do if the
session has timed-out in the meantime.

Note that you are opening-up a large can of worms by doing this. You
will be introducing lots of other problems that you will have to solve.

You might want to check out securityfilter, a project that is quite
long in the tooth, but somewhat gracefully handles situations like
this. It has its own set of awkward things you'll have to deal with
(like not being able to authenticate against Tomcat's realms, for
instance).

[One of these days, I'm going to get off my butt and update that project
.]

- -chris
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJVeY5OAAoJEBzwKT+lPKRYdpkQAJ4BGgPNJWU34mAKo0YljHBN
rAeIjl4gn4k+xU7mHwWH3h45hgCQVh+iCkqjH7rbgeGI1/IqETJcK2lXoXk/B+ZY
VjmMjh+fqRsUZG/UoP2T3cvrqCs0tl1Sm17WzJOLePYNNuowQVbmFznl4GAVoKsI
yRFYz7fPD4nXiS7+endkdVPGEn1sYSCQP5+EyVUNIlvqwOb9PN3bAlDSczidVHCN
oDgSrOvE9SGC88igS8sLW3NiWXPYqXVeI1YiX46S5AC/1JApFPzdVhYsbgvRUegG
k1EPo0YusG1jtBLj6fsqz6bsXZSIGchjZf2hwm/rrrpWdxJnKNAds8FRJ8Gfz43w
uJWRXZtwpBYXdl1btBLUlCHTUTUPkQZDqcT2pktmtAK7tDCQm7BA8x4cibRwztMI
QstMMgPjdjhS4ChuCcfEPoNzKNVDMDDH4pdjHj8hXE/b7PA7BSjRGtZIAvu0ZYZc
RauQUnsTGMzQyNeDAZBCqMhAxQO42B82Yu0cpMTVHqRDw5uEJq2+bhgzi7slJOMO
jLFxVT/k6DNdTG8+Z7eEfvaZXkf11o4arRGOH3gzZLtzPZgJQ3pDJ9gjKkvpcc4F
FzTTDDkMRuZG2J8VHrAKqf2VGNcqIgmdEKPMtKde4A3xJDtv7CGZLLhksneBLLAU
bsPyxrRr5sFycwffd/9k
=tRmm
-----END PGP SIGNATURE-----

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

Reply via email to