Hi.

You posted your original question to the Tomcat Users list, and that is where you should keep posting. This way, other users later who search the list archives may find the answers they are looking for.

Some further answers below.

J. Brian Hall wrote:
Hey Andre, I found the problem, but don't understand it.  My error page is
below.  The problem is that the error page contained a link back to go back
to the login.jsp page (which seemed reasonable), but when I changed the link
to go to index.jsp (rather than login.jsp), everything now works as
expected.  I can also login successfully (after the first login failure) if
I just use the back-page button in the browser.  Maybe you know what is
going on here?  Here's my error page:

<html>
        <head>
                <title>Login Error</title>
                <meta http-equiv=ÓContent-TypeÓ content=Ótext/html;
charset=UTF-8Ó>
        </head>
        <body>
                <h1>You failed to login correctly.  To go back to the <a
href="login.jsp">login page</a>.</h1>
        </body>
</html>


You need to think a bit, and figure out how this all works.
Then you'll be able to fix it, and maybe also figure out better ways (for you) of doing what you want.


There are many HTTP authentication schemes, but roughly they all follow some 
basic schema :

1) the browser sends a request to the server, for some resource. For the sake of the example, say this is "/index.html". 2) the server receives the request, and notices that "/index.html" is within a "protected area" which requires authentication. The server then checks if the request included some form of authentication. 3a) if the request contained a valid authentication for that protected area, the server returns the requested resource and that's it. 3b) if the request did not contain a valid authentication, the server returns "something" to the browser, to indicate that authentication is required. This "something" can be a 401 HTTP response ("Authorization required"), or - in your case - a login page. 4) Now some form of authentication has to be provided by the browser. In some cases, the browser pops up a dialog for the user to fill-in a login and password. In other cases, the browser does that itself internally, based on the network or domain login of the user. In your case, the login form is shown, the user fills it in and submits the form. 5) the server receives this new request. In some cases, it may be a request for the origina URL again ("/index.html"), just with some authentication information attached. In such a case, the server would redo items (2) and (3a) above.

In the case of form-based authentication, it is a bit more complicated : the server receives this *new* request (from the login page), verifies the credentials supplied, and if they are ok, it should "remember" that the original request was for "/index.html", and forward the request back there.

That's the key here : this "remembering" on the part of the server. It must be able to store somewhere that the original request was for "/index.html", and then, when receiving this totally different request from the browser (the submit of the login page), there should be something in the login request which allows the server to retrieve this previously-stored information.

Obviously, in your case, it works when the user requests "/index.html" the first time, gets the login page instead, fills it in correctly, sends the completed login page, and finally receives the page "/index.html" from the server.

But it doesn't work anymore if
1) the browser sends a request for "/index.html"
2) the server returns the login page "login.jsp"
3) the user fills in the (wrong) credentials and submits that form to the server
4) the server returns the error page "error.jsp"
5) a link on that page links directly to the login page again, and the user 
clicks it

Can you guess why ?

Hint : the link on the error page should direct back to the original "/index.html", not directly to the login page. Or, if you want it otherwise, then *you* must provide some way for the server to remember what was the original request that started it all, through the full login-error-new login sequence.











-----Original Message-----
From: André Warnier [mailto:a...@ice-sa.com] Sent: Sunday, December 01, 2013 4:05 PM
To: Tomcat Users List
Subject: Re: j_security_check error

J. Brian Hall wrote:
I’m using Tomcat and a MySQL database that contains usernames/passwords/roles for form-based authentication. Logging in with correct username/password successfully directs to index.jsp (from login.jsp). Logging in with incorrect username/password successfully directs to error.jsp (from login.jsp). However, an unsuccessful login followed by attempting to login with the correct username/password leads to an HTTP Status 404 j_security_check error that says the requested resource is not available. Does anyone know what may be wrong? Here are the details of my configuration.


To understand what is going on there, I suggest that you install a browser
plugin such as HttpFox, Live HTTP headers, or Fiddler2(for IE), and that you
have a look at which request URLs and HTTP headers are really being sent by
the browser to the server (and vice-versa), at each step.
Probably what happens is that the original URL requested by the browser is
lost somewhere when you go through the error page, and that by the time you
do the second (correct) authentication, the server does not know anymore
where to forward the (now authenticated) request to. So it ends up being
forwarded to some invalid URL, and you get back a 404 error.

What does your "error.jsp" page really look like ?



---------------------------------------------------------------------
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