Eu estou explorando formas puras de Java EE de fazer segurança programática, especialmente usuários de login, baseados no domínio jdbc do meu servidor glassfish.
Então, basicamente, no meu servlet de login que estou fazendo
String username = request.getParameter("username"); String password = request.getParameter("password"); try { request.login(username, password); ....
Sem fazer nada no meu web.xml, a região padrão (arquivo) é usada. Eu não quero isso, eu quero usar o meu jdbcRealm chamado jdbcsecurerealm.
Então, estou adicionando o seguinte ao meu web.xml
FORM jdbcsecurerealm
Note que eu não adiciono nenhum form-login-config para definir form-login-page e form-error-page.
Então, se eu definir restrições de segurança, como
Admin Pages /admin/* administrator
bem … funciona! O request.login verifica o meu jdbcRealm e se eu tentar acessar páginas seguras sem estar logado, então eu estou recebendo um bom 403.
Mas parece que estou misturando segurança declarativa e segurança programática, porque eu sinto que não deveria estar declarando nada dentro de web.xml, mas sim usando request.isUserInRole.
Pergunta :
Estou atingindo um comportamento específico do glassfish, ou é permitido usar segurança programática (request.login) com um território jdbc definido dentro de web.xml sem form-login-config?
Atualização Acabei de ver que existe a possibilidade de especificar um reino dentro de glassfish-application.xml, é uma abordagem melhor para construir um ouvido em vez de uma guerra, a fim de especificar o reino?
Uma abordagem puramente programática em um caminho portátil (Java EE puro) não é possível quando você usa módulos de login (proprietários) específicos do contêiner, como o módulo / domínio de login do GlassFish JDBC.
Existe uma API no Java EE 6 para isso: JASPIC. Com essa API (SPI tecnicamente), você pode construir módulos de autenticação portáteis e configurá-los totalmente programáticos sem a necessidade de qualquer declaração.
Eu escrevi um artigo no blog sobre isso que, esperançosamente, fornece mais detalhes.
Bem, existem dois aspectos para a segurança em aplicativos da Web: Autenticação e Autorização. O que você está usando aqui é a autenticação programática (a maneira como os usuários estão efetuando login) e a autorização declarativa (definindo o que os usuários podem ver). Não há problema em misturar ambos, na minha opinião.
Se você mantiver seu reino em seu web.xml
, seu aplicativo será mais portátil. (o que significa que você pode implantar sua guerra, por exemplo, um servidor tomcat sem alterações).