What is the standard way of doing form authentication with Java Servlets?
Since now I have implemented that myself using a simple POST HTML form:
Try forwarding to error page only if data about a user is not present in database. If you found your user use the following code to redirect him to his "home" page
RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp");
dis.forward(request, response);
Try using servlet filters, no need to configure JAAS and other staff
You should be using JAAS security provided by Servlet containers like Tomcat, Websphere, Glassfish.
By default these containers supports these authentication types:
HTTP Basic Authentication
Specifying HTTP basic authentication requires that the server request a user name and password from the web client and verify that the user name and password are valid by comparing them against a database of authorized users in the specified or default realm.
Basic authentication is the default when you do not specify an authentication mechanism.
When basic authentication is used, the following actions occur:
The below Figure shows what happens when you specify HTTP basic authentication.
HTTP Basic Authentication Diagram of four steps in HTTP basic authentication between client and server
Form-Based Authentication
Form-based authentication allows the developer to control the look and feel of the login authentication screens by customizing the login screen and error pages that an HTTP browser presents to the end user. When form-based authentication is declared, the following actions occur.
The below Figure shows what happens when you specify form-based authentication.
When you create a form-based login, be sure to maintain sessions using cookies or SSL session information.
For authentication to proceed appropriately, the action of the login form must always be j_security_check. This restriction is made so that the login form will work no matter which resource it is for and to avoid requiring the server to specify the action field of the outbound form. The following code snippet shows how the form should be coded into the HTML page:
<form method="POST" action="j_security_check">
<input type="text" name="j_username">
<input type="password" name="j_password">
</form>
Digest Authentication
Like basic authentication, digest authentication authenticates a user based on a user name and a password. However, unlike basic authentication, digest authentication does not send user passwords over the network. Instead, the client sends a one-way cryptographic hash of the password and additional data. Although passwords are not sent on the wire, digest authentication requires that clear-text password equivalents be available to the authenticating container so that it can validate received authenticators by calculating the expected digest.
References: