Java EE 6 Seguridad programática, glassfish y JDBC realm
Estoy explorando formas puras de Java EE para hacer seguridad programática, especialmente usuarios de inicio de sesión, basados en el reino jdbc de mi servidor glassfish.
Así que básicamente, en mi servlet de inicio de sesión que estoy haciendo
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
request.login(username, password);
....
Sin hacer nada en mi web.xml, se usa el reino predeterminado (archivo). No quiero eso, quiero usar mi jdbcRealm llamado jdbcsecurerealm.
Así que estoy agregando lo siguiente a mi web.xml
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbcsecurerealm</realm-name>
</login-config>
Tenga en cuenta que no agrego ninguna configuración de inicio de sesión de formulario para definir la página de inicio de sesión de formulario y la página de error de formulario.
Entonces si defino restricciones de seguridad 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>
bueno ... funciona! El request.login comprueba mi jdbcRealm y si intento acceder a las páginas seguras sin iniciar sesión, obtengo un buen 403.
Pero parece que estoy mezclando la seguridad declarativa y la seguridad programática, porque siento que no debería declarar nada dentro de web.xml, sino más bien usar request.isUserInRole.
Pregunta:
¿Estoy golpeando un comportamiento específico de glassfish, o está permitido usar seguridad programática (request.login) con un reino jdbc definido dentro de web.xml sin form-login-config?
Actualizar Acabo de ver que existe la posibilidad de especificar un reino dentro de glassfish-application.xml. ¿Es un mejor enfoque construir un oído en lugar de una guerra para especificar el reino?