No seu web.xml:
Vc vai definir os security-roles. Eles são como grupos que só existem dentro da sua aplicação.
<security-role>
<role-name>ExternalUser</role-name>
</security-role>
Então vc vai definir as restrições de acesso. Elas dizem ao seu servidor quais urls podem ser acessadas
e por quais security-roles elas podem ser acessadas.
<security-constraint>
<display-name>EmailedUsers</display-name>
<web-resource-collection>
<web-resource-name>EmailCheck</web-resource-name>
<!-- Aqui vc informa o padrão de urls a serem adicionados à essa constraint. Da mesma forma que uma servlet ou um filter. -->
<url-pattern>/emailcheck.jsp</url-pattern>
</web-resource-collection>
<!-- Aqui vc informa quais roles poderão acessar as páginas dessa constraint. -->
<auth-constraint>
<role-name>ExternalUser</role-name>
</auth-constraint>
</security-constraint>
Agora é só configurar o login:
<login-config>
<!-- Diz ao servidor que ele deve usar uma página web para fazer login. -->
<auth-method>FORM</auth-method>
<!-- O Realm é uma espécie de "banco de dados" de usuários. Alguns já vem definidos no servidor, mas vc pode configurar/criar o seu próprio. -->
<realm-name>myrealm</realm-name>
<!-- Para configurar o sistema de login -->
<form-login-config>
<!-- Informa a página de login e a página de erro do login. Vc pode usar a mesma página se vc quizer. -->
<form-login-page>/login.jsp</form-login-page>
<form-login-error>/login-error.jsf</form-login-page>
</form-login-config>
</login-config>
Sua página de login deve usar o seguinte form para autenticar o usuário:
<form action="j_security_check" method="POST">
<label for="username">Username:</label>
<input id="username" type="text" name="j_username" />
<label for="password">Password:</label>
<input id="password" type="password" name="j_password" />
<button type="Submit">Login</button>
</form>
É importante notar:
- o action da form “j_security_check” envia os dados p/ o servidor autenticar o usuário.
- o nomes “j_username” e “j_password” identificam os campos “username” e “password” p/ q o servidor possa fazer a autenticação
do usuário.
Por fim vc precisará mapear os security-roles q vc definiu no seu web.xml aos grupos definidos do banco de dados, Ldap,
ou qualquer outro sistema de armazenamento q vc estiver usando p/ armazenar os dados do seu usuário. Essa parte é um pouco
mais difícil pq o mapeamento varia de servidor p/ servidor. Aqui eu trabalho com o Glassfish e esse mapeamento é feito através
do arquivo sun-web.xml.
<security-role-mapping>
<!-- O "security-role" definido no seu web.xml -->
<role-name>ExternalUser</role-name>
<!-- O grupo tal como é armazenado no seu banco, LDAP, etc... -->
<group-name>User</group-name>
</security-role-mapping>