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

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbcsecurerealm</realm-name>
</login-config>

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

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Admin Pages</web-resource-name>
        <description></description>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>administrator</role-name>
    </auth-constraint>
</security-constraint>

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.

Questão:

Estou atingindo um comportamento específico do glassfish ou é permitido usar a segurança programática (request.login) com um domínio jdbc definido dentro de web.xml sem form-login-config?

Atualizar 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 para especificar o reino?

questionAnswers(2)

yourAnswerToTheQuestion