I’ve been a little puzzled with this as I have not seen many examples that gave me the complete picture. The best explanation I found so far is this.
By defining a security role in web.xml such as “admin” for example, and having my login form with all the necessary fields (i.e j_security_check as action, and fields j_username, j_password), how/where does the actual authentication occur?
I plan to use a custom authentication using username/passwords (hashes) stored in the database. When the user submits the form, how do I make the Java EE Web Container invoke my sevlet/bean method do perform the actual authentication? I didn’t notice any place to add a hook to my code in web.xml which would do the actual authentication.
In the servlet implementation, the servletcontainer. In Tomcat for example, it’s done by the
AuthenticatorBaseclass (source code here).If you’d like to keep using container managed authentication, but instead want to check the login against a database, then you need to configure the so-called “realm” accordingly. It’s unclear which servletcontainer you’re using, but in for example Tomcat, the documentation is available here: Tomcat 6.0 Realm HOW-TO.
If you really want to have your own homegrown authentication system invoked instead, then you need to drop the container managed security and homegrow it further. Which is not recommended.