2012-06-25 28 views
10

¿Cuál es la forma estándar de realizar la autenticación de formulario con Servlets de Java?Autenticación de formulario estándar Servlets de Java

Desde ahora he implementado que a mí mismo mediante un simple formulario HTML POST:

  1. la comprobación de los parámetros enviados contra la base de datos
  2. si está presente, guardar un objeto de usuario en la HttpSession
  3. cheque en todas las servlet si este objeto está presente
  4. si no: redirigir a la página de inicio de sesión con un mensaje de error

Pero ahora he tropezado con How to Configure Security with Embedded Jetty y ahora estoy pensando en que puedo reutilizar las soluciones ya implementadas para ese problema, pero ¿cuál es el enfoque estándar aquí? Estoy usando Jetty, pero ¿qué pasa con Tomcat u otros servidores web?

También leí sobre j_security_check, ¿qué pasa con eso? ¿Es eso un método heredado?

Respuesta

14

Debe utilizar la seguridad JAAS proporcionada por los contenedores Servlet como Tomcat, Websphere, Glassfish.

Por defecto estos contenedores es compatible con estos tipos de autenticación:

  • BÁSICO
  • COMPENDIO
  • FORMA
  • CLIENTE-CERT

autenticación básica HTTP

La especificación de autenticación básica HTTP requiere que el servidor solicite un nombre de usuario y contraseña del cliente web y verifique que el nombre de usuario y la contraseña sean válidos comparándolos con una base de datos de usuarios autorizados en el dominio especificado o predeterminado.

La autenticación básica es la predeterminada cuando no se especifica un mecanismo de autenticación.

Cuando se utiliza la autenticación básica, las siguientes acciones:

  1. Un cliente solicita acceso a un recurso protegido.
  2. El servidor web devuelve un cuadro de diálogo que solicita el nombre de usuario y la contraseña.
  3. El cliente envía el nombre de usuario y la contraseña al servidor. 4. \ El servidor autentica al usuario en el dominio especificado y, si tiene éxito, devuelve el recurso solicitado.

La figura siguiente muestra lo que ocurre cuando se especifica la autenticación básica de HTTP. enter image description here

de autenticación básica HTTP Diagrama de cuatro pasos en la autenticación básica HTTP entre el cliente y el servidor

Formulario de autenticación basada en

la autenticación basada en formularios permite al desarrollador controlar el aspecto y el tacto de la inicie sesión en las pantallas de autenticación personalizando la pantalla de inicio de sesión y las páginas de error que un navegador HTTP presenta al usuario final. Cuando se declara la autenticación basada en el formulario, se producen las siguientes acciones.

  1. Un cliente solicita acceso a un recurso protegido.
  2. Si el cliente no está autenticado, el servidor redirige el cliente a una página de inicio de sesión.
  3. El cliente envía el formulario de inicio de sesión al servidor.
  4. El servidor intenta autenticar al usuario.
  5. Si la autenticación tiene éxito, se verifica el principal autenticado del usuario para asegurarse de que tiene un rol autorizado para acceder al recurso. Si el usuario está autorizado, el servidor redirecciona al cliente al recurso utilizando la ruta de URL almacenada.
  6. Si la autenticación falla, el cliente se reenvía o se redirige a una página de error.

La siguiente figura muestra lo que sucede cuando se especifica la autenticación basada en el formulario.

enter image description here

Cuando se crea un inicio de sesión basado en formularios, asegúrese de mantener sesiones utilizando cookies o la información de sesión SSL.

Para que la autenticación proceda adecuadamente, la acción del formulario de inicio de sesión siempre debe ser j_security_check. Esta restricción se realiza para que el formulario de inicio de sesión funcione sin importar a qué recurso pertenezca y para evitar que el servidor especifique el campo de acción del formulario de salida. El siguiente fragmento de código muestra cómo la forma debe ser codificada en la página HTML:

<form method="POST" action="j_security_check"> 
    <input type="text" name="j_username"> 
    <input type="password" name="j_password"> 
</form> 

autenticación implícita

Al igual que la autenticación básica, autenticación Digest autentica un usuario basado en un nombre de usuario y una contraseña. Sin embargo, a diferencia de la autenticación básica, la autenticación resumida no envía contraseñas de usuario a través de la red. En cambio, el cliente envía un hash criptográfico unidireccional de la contraseña y datos adicionales. Aunque las contraseñas no se envían por cable, la autenticación resumida requiere que los equivalentes de contraseña de texto claro estén disponibles para el contenedor de autenticación para que pueda validar los autenticadores recibidos calculando el resumen esperado.

Referencias:

-1

Intente reenviar a la página de error solo si los datos sobre un usuario no están presentes en la base de datos. Si has encontrado tu usuario utilice el código siguiente para redirigirlo a su página "casa"

RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp"); 
dis.forward(request, response); 
1

utilice los filtros de servlets, no hay necesidad de configurar JAAS y otro personal

Cuestiones relacionadas