JSP Login com segurança declarativa - como acontece a autenticação real?
-
26-09-2019 - |
Pergunta
Fiquei um pouco intrigado com isso, pois não vi muitos exemplos que me deram a imagem completa. A melhor explicação que encontrei até agora é isto.
Ao definir uma função de segurança no web.xml como "admin", por exemplo, e ter meu formulário de login com todos os campos necessários (ou seja, j_security_check como ação e campos j_username, j_password), como/onde ocorre a autenticação real?
Planejo usar uma autenticação personalizada usando o nome de usuário/senhas (hashes) armazenado no banco de dados. Quando o usuário envia o formulário, como faço para fazer o contêiner Java EE Web invocar meu método Sevlet/Bean executa a autenticação real? Não notei nenhum lugar para adicionar um gancho ao meu código no web.xml que faria a autenticação real.
Solução
Ao definir uma função de segurança no web.xml como "admin", por exemplo, e ter meu formulário de login com todos os campos necessários (ou seja, j_security_check como ação e campos j_username, j_password), como/onde ocorre a autenticação real?
Na implementação do servlet, o ServletContainer. Em Tomcat, por exemplo, é feito pelo AuthenticatorBase
classe (código -fonte aqui).
Planejo usar uma autenticação personalizada usando o nome de usuário/senhas (hashes) armazenado no banco de dados. Quando o usuário envia o formulário, como faço para fazer o contêiner Java EE Web invocar meu método Sevlet/Bean executa a autenticação real? Não notei nenhum lugar para adicionar um gancho ao meu código no web.xml que faria a autenticação real.
Se você deseja continuar usando a autenticação gerenciada por contêineres, mas deseja verificar o login em um banco de dados, precisará configurar o chamado "Reino" de acordo. Não está claro qual servletContainer você está usando, mas, por exemplo, Tomcat, a documentação está disponível aqui: Tomcat 6.0 Realm como fazer.
Se você realmente deseja que seu próprio sistema de autenticação doméstico seja invocado, precisará abandonar a segurança gerenciada pelo contêiner e a agenda a casa ainda mais. Que não é recomendado.
Outras dicas
o real A autenticação está fazendo através de duas maneiras:
- Por meio de uma maneira proprietária do servidor, por exemplo, o *LoginModules Em Jboss, ou o Tomcat, um Balusc mencionou. Estes são diferentes para cada servidor.
- Via Jaspic, que foi introduzido em Java EE 6.
Jaspic praticamente padronizou os métodos proprietários, mas é uma API de nível bastante baixo e, infelizmente, disponível apenas para implementações Java EE 6 e 7 de perfil completo.
Ver Implementando a autenticação de contêiner em Java EE com Jaspic para mais detalhes.