/**
* @(#) Login.java
*/
package com.tarisan.servlets;
import com.tarisan.control.*;
import com.tarisan.data.*;
import com.tarisan.excepcion.*;
import com.tarisan.log.*;
import com.tarisan.persistencia.PersistenciaParametros;
import java.io.IOException;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
/**
* Login (validación y autenticación) del usuario en la aplicación Tarisan.
* @author Dpto. Informática.
* @version 1.0, 24/09/2003
*/
public class Login extends HttpServlet implements Constantes
{
/**
* Recepción del método POST requerida por un cliente.
* Comprueba el usuario/password del médico conectado respondiendo de la siguiente manera:
HttpServletRequest enviado por el cliente.
* @param response Objeto HttpServletResponse que recibirá el cliente.
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
{
LogTarisan.logger.log(NivelLog.INFO, " Login.doPost().INI - Empezamos - java 8");
response.setHeader("Expires", "0");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
HttpSession sesion = request.getSession(true);
//Borrar los objetos de sesión del usuario conectado anteriormente
sesion.removeAttribute("USUARIO");
sesion.removeAttribute("PERFIL");
sesion.removeAttribute("MEDICO");
String codigo = request.getParameter("USUARIO");
String clave = request.getParameter("CLAVE");
Usuario usuario = null;
Object objetoSeleccionado = null;
Object objetoSeleccionadoSimulado = null;
String sMensaje = "";
int nCodigo = Integer.parseInt(codigo);
try
{
/*int nCodigo = Integer.parseInt(codigo);*/
sesion.setAttribute("MEDICO", nCodigo);
PersistenciaUsuario perUsu = new PersistenciaUsuario();
PersistenciaTaregmed perRegMed = new PersistenciaTaregmed();
Calendar calHoy = Calendar.getInstance();
try
{
if ((request.getParameter("SIMULADO")!=null)&&(Integer.parseInt(request.getParameter("SIMULADO"))==1)){
objetoSeleccionadoSimulado = perUsu.seleccionarSimulado(nCodigo);
usuario = (Usuario)objetoSeleccionadoSimulado;
sesion.setAttribute("USUARIO", null);
sesion.setAttribute("USUARIO", usuario);
String perfil = this.obtenerPerfilHashtable(usuario.getEspecialidad());
sesion.setAttribute("PERFIL", perfil);
LogTarisan.logger.log(NivelLog.DEBUG, "Perfil: "+perfil);
if (perfil.compareTo(PERFIL_ADMINISTRADOR) == 0)
{
response.sendRedirect("./GestorAdministracion?OPCION=" + OPC_ADM_USUARIO_LISTA);
}
else{
response.sendRedirect("../jsp/med/noticias.jsp?x=19&pagina=1");
}
}else{
objetoSeleccionado = perUsu.seleccionar(nCodigo, clave);
usuario = (Usuario)objetoSeleccionado;
if(this.numeroIntentosExcedido(sesion))
{
//Se ha sobrepasado el número máximo de intentos de conexión en la sesión de usuario
LogTarisan.logger.log(NivelLog.DEBUG, "Login.java llega 81, vamos a bloquear el usuario\n\n\n");
perUsu.bloquearUsuario(nCodigo, calHoy);
sMensaje = this.obtenerMensaje(USUARIO_INTENTOS);
LogTarisan.logger.log(NivelLog.INFO, sMensaje);
sesion.setAttribute("ERROR", sMensaje);
response.sendRedirect("../jsp/error.jsp" );
}
else
{
//Usuario correcto
LogTarisan.logger.log(NivelLog.INFO, "Usuario " + usuario + " conectado correctamente: "+usuario.getEspecialidad());
LogTarisan.logger.log(NivelLog.DEBUG, "\n\nSession timeout: "+sesion.getMaxInactiveInterval());
//Creación de los objetos de sesión propios
//IDENTIFICACION TIPO DE PERFIL
sesion.setAttribute("USUARIO", null);
sesion.setAttribute("USUARIO", usuario);
//String perfil = this.obtenerPerfil(usuario.getEspecialidad());
String perfil = this.obtenerPerfilHashtable(usuario.getEspecialidad());
sesion.setAttribute("PERFIL", perfil);
sesion.removeAttribute("INTENTOS");
LogTarisan.logger.log(NivelLog.DEBUG, "Perfil: "+perfil);
//Registro del acceso exitoso del usuario a la aplicación
perRegMed.insertar(nCodigo, calHoy, "S");
if (usuario.getFechaUltAcceso() == null)
{
usuario.setFechaUltAcceso(new Timestamp(calHoy.getTime().getTime()));
//Introducción de la nueva clave de usuario por ser primer acceso en la aplicación
LogTarisan.logger.log(NivelLog.INFO, "El Usuario " + usuario + " tiene que cambiar la clave");
response.sendRedirect("../jsp/cambio_clave.jsp" );
}
else if (usuario.getFechaCaducidad() != null)
{
//Actualización de la fecha de último acceso
perUsu.actualizarFechaAcceso(nCodigo, calHoy);
usuario.setFechaUltAcceso(new Timestamp(calHoy.getTime().getTime()));
//Muestra el mensaje de preaviso de caducidad de la clave
SimpleDateFormat sdf = new SimpleDateFormat(PersistenciaParametros.formatoFechas);
StringBuffer mensaje = new StringBuffer();
mensaje.append(this.obtenerMensaje(USUARIO_PREAVISO));
mensaje.append(" ");
mensaje.append(sdf.format(usuario.getFechaCaducidad()));
LogTarisan.logger.log(NivelLog.INFO, mensaje.toString());
sesion.setAttribute("ERROR", mensaje.toString());
response.sendRedirect("./GestorMedicos?OPCION=" + OPC_MED_PREAVISO);
}
else
{
//Actualización de la fecha de último acceso
perUsu.actualizarFechaAcceso(nCodigo, calHoy);
usuario.setFechaUltAcceso(new Timestamp(calHoy.getTime().getTime()));
//Redirección a la página inicial de la aplicación según el perfil del usuario conectado
if (perfil.compareTo(PERFIL_ADMINISTRADOR) == 0)
{
response.sendRedirect("./GestorAdministracion?OPCION=" + OPC_ADM_USUARIO_LISTA);
}
else
{
if(nCodigo==956){
sesion.setAttribute("U", null);
sesion.setAttribute("U", nCodigo);
response.sendRedirect("../jsp/adm/simulado.jsp" );
}else{
//response.sendRedirect("./GestorMedicos?OPCION=" + OPC_MED_LIQUIDACION);
//sMensaje = "