Java EE 6 Programmatic security, glassfish e JDBC realm

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).