Añado los fuentes de java
This commit is contained in:
@@ -0,0 +1,435 @@
|
||||
/**
|
||||
* @(#) 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 <a href="mailto:sistemas@imqnavarra.com">Dpto. Informática</a>.
|
||||
* @version 1.0, 24/09/2003
|
||||
*/
|
||||
public class Login extends HttpServlet implements Constantes
|
||||
{
|
||||
|
||||
/**
|
||||
* Recepción del método POST requerida por un cliente.<br>
|
||||
* Comprueba el usuario/password del médico conectado respondiendo de la siguiente manera:<ol>
|
||||
* <li>Si no existe el usuario redirige a la página de error con el mensaje de usuario no encontrado</li>
|
||||
* <li>Si existe el usuario:<ul>
|
||||
* <li>carga el objeto de sesión USUARIO con los datos del médico conectado</li>
|
||||
* <li>carga el objeto de sesión PERFIL con el correspondiente al médico conectado</li>
|
||||
* <li>para el perfil de administrador redirige a la página del listado de usuarios del módulo de administración</li>
|
||||
* <li>para el resto de perfiles redirige a la página de liquidaciones del módulo de gestión de médicos</li>
|
||||
* </ul></li>
|
||||
* </ol>
|
||||
* @param request Objeto <code>HttpServletRequest</code> enviado por el cliente.
|
||||
* @param response Objeto <code>HttpServletResponse</code> 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 = "<h3 id='idAviso' style='text-align:left'>CAMBIOS A PARTIR DEL 16/03/2015:<br/><br/> - SE ACTUALIZA EL CATÁLOGO DE DETERMINACIONES EN LAS PETICIONES DE ANALiTICAS<br/> - SEGuN INDICACIONES DEL IGUALATORIO ALGUNAS DETERMINACIONES NECESItARaN JUSTIFICAción<br/><br/>CONSULTAR FUNCIONAMIENTO PINCHANDO <a href='/tarisan/Manual_Niveles_Analiticas.pdf' target='blank'>AQUi</a></h3>";
|
||||
//PersistenciaTamensaje pertamensaje = new PersistenciaTamensaje();
|
||||
//sMensaje = pertamensaje.obtenerMensaje(69).getMensaje(); //No quitar el html del campo de la bbdd si se quiere guardar el estilo (parpadeante de rojo a negro)
|
||||
//sesion.setAttribute("AVISO", sMensaje);
|
||||
//response.sendRedirect("../jsp/pac/gestor.jsp");
|
||||
response.sendRedirect("../jsp/med/noticias.jsp?x=19&pagina=1");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
catch(ClassCastException ex1)
|
||||
{
|
||||
//Obtención del mensaje de error correspondiente al intento de login en la aplicación
|
||||
Integer nMensaje = (Integer)objetoSeleccionado;
|
||||
|
||||
if(((nMensaje == USUARIO_INEXISTENTE) || (nMensaje == USUARIO_ERROR_CLAVE)) && (this.numeroIntentosExcedido(sesion)))
|
||||
{
|
||||
sMensaje = this.obtenerMensaje(USUARIO_INTENTOS);
|
||||
try {
|
||||
perUsu.bloquearUsuario(nCodigo, calHoy);
|
||||
} catch (ExcepcionTarisan e) {
|
||||
LogTarisan.logger.log(NivelLog.ERROR, "Excepción en el login de usuario " + codigo + ": " + e);
|
||||
sesion.setAttribute("ERROR", "");
|
||||
response.sendRedirect("../jsp/error.jsp" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sMensaje = this.obtenerMensaje(nMensaje);
|
||||
|
||||
try
|
||||
{
|
||||
if(nMensaje != USUARIO_INEXISTENTE)
|
||||
//Registro del acceso fallido del usuario a la aplicación
|
||||
perRegMed.insertar(nCodigo, calHoy, "N");
|
||||
}
|
||||
catch(ExcepcionTarisan ex)
|
||||
{
|
||||
LogTarisan.logger.log(NivelLog.ERROR, "Excepción en el login de usuario " + codigo + ": " + ex);
|
||||
sesion.setAttribute("ERROR", "");
|
||||
response.sendRedirect("../jsp/error.jsp" );
|
||||
}
|
||||
}
|
||||
sesion.setAttribute("ERROR", sMensaje);
|
||||
LogTarisan.logger.log(NivelLog.INFO, sMensaje);
|
||||
response.sendRedirect("../jsp/error.jsp" );
|
||||
}
|
||||
catch(ExcepcionTarisan ex)
|
||||
{
|
||||
LogTarisan.logger.log(NivelLog.ERROR, "Excepción en el login de usuario " + codigo + ": " + ex);
|
||||
sesion.setAttribute("ERROR", "");
|
||||
response.sendRedirect("../jsp/error.jsp" );
|
||||
}
|
||||
}
|
||||
catch(NumberFormatException ex)
|
||||
{
|
||||
LogTarisan.logger.log(NivelLog.ERROR, "Excepción en el login de usuario " + codigo + ": " + ex);
|
||||
if(this.numeroIntentosExcedido(sesion))
|
||||
{
|
||||
sMensaje = this.obtenerMensaje(USUARIO_INTENTOS);
|
||||
try {
|
||||
PersistenciaUsuario perUsu = new PersistenciaUsuario();
|
||||
Calendar calHoy = Calendar.getInstance();
|
||||
perUsu.bloquearUsuario(Integer.parseInt(codigo), calHoy);
|
||||
} catch (ExcepcionTarisan e) {
|
||||
LogTarisan.logger.log(NivelLog.ERROR, "Excepción en el login de usuario " + codigo + ": " + e);
|
||||
sesion.setAttribute("ERROR", "");
|
||||
response.sendRedirect("../jsp/error.jsp" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sMensaje = this.obtenerMensaje(USUARIO_INEXISTENTE);
|
||||
}
|
||||
LogTarisan.logger.log(NivelLog.INFO, sMensaje);
|
||||
sesion.setAttribute("ERROR", sMensaje);
|
||||
response.sendRedirect("../jsp/error.jsp" );
|
||||
}
|
||||
//}
|
||||
|
||||
LogTarisan.logger.log(NivelLog.INFO, "Login.doPost().FIN - java 8");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Calcula el perfil asignado al médico conectado en función de su especialidad.
|
||||
* @param especialidad El valor de la especialidad del médico.
|
||||
* @return El código de perfil asignado a la especialidad.
|
||||
*/
|
||||
private String obtenerPerfil(int especialidad)
|
||||
{
|
||||
String perfil = "";
|
||||
|
||||
switch (especialidad)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
perfil = PERFIL_ADMINISTRADOR;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
perfil = PERFIL_CABECERA;
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
perfil = PERFIL_ANALISTA;
|
||||
break;
|
||||
}
|
||||
case 17:
|
||||
{
|
||||
/*perfil = PERFIL_ANALISTA;*/
|
||||
perfil = PERFIL_RADIOLOGO;
|
||||
break;
|
||||
}
|
||||
case 19:
|
||||
{
|
||||
perfil = PERFIL_DENTISTA;
|
||||
break;
|
||||
}
|
||||
case 37:
|
||||
{
|
||||
perfil = PERFIL_REHABPOD;
|
||||
break;
|
||||
}
|
||||
case 50:
|
||||
{
|
||||
perfil = PERFIL_ATS;
|
||||
}
|
||||
case 53:
|
||||
{
|
||||
perfil = PERFIL_REHABPOD;
|
||||
break;
|
||||
}
|
||||
case 70:
|
||||
{
|
||||
perfil = PERFIL_ODONTOLOGIA;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
perfil = PERFIL_ESPECIALISTA;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LogTarisan.logger.log(NivelLog.DEBUG, "A la especialidad:"+especialidad+"le corresponde el perfil:"+perfil);
|
||||
return perfil;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcula el perfil asignado al médico conectado en función de su especialidad
|
||||
* teniendo en cuenta el fichero de propiedades tarisan.properties
|
||||
* @param especialidad El valor de la especialidad del médico.
|
||||
* @return El código de perfil asignado a la especialidad.
|
||||
*/
|
||||
private String obtenerPerfilHashtable(int especialidad)
|
||||
{
|
||||
String perfil = "";
|
||||
|
||||
boolean existe = ParametrosConfiguracion.tablaPerfiles.containsKey(Integer.valueOf(especialidad));
|
||||
|
||||
if (existe)
|
||||
{
|
||||
|
||||
perfil = ParametrosConfiguracion.tablaPerfiles.get(Integer.valueOf(especialidad)).toString();
|
||||
} else {
|
||||
perfil = Constantes.PERFIL_ESPECIALISTA;
|
||||
}
|
||||
|
||||
LogTarisan.logger.log(NivelLog.DEBUG, " - Existe hastable? - " + existe);
|
||||
return perfil;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Obtiene el mensaje de error correspondiente al intento de conexión de usuario.
|
||||
* @param nMensaje Número del mensaje.
|
||||
* @return El mensaje correspondiente.
|
||||
*/
|
||||
private String obtenerMensaje(Integer nMensaje)
|
||||
{
|
||||
String mensaje = "";
|
||||
|
||||
if(nMensaje.equals(USUARIO_INEXISTENTE))
|
||||
{
|
||||
mensaje = "Usuario y password inexistentes, vuelva a intentarlo por favor";
|
||||
}
|
||||
else if(nMensaje.equals(USUARIO_ERROR_CLAVE))
|
||||
{
|
||||
mensaje = "Usuario y password inexistentes, vuelva a intentarlo por favor";
|
||||
}
|
||||
else if(nMensaje.equals(USUARIO_BLOQUEADO))
|
||||
{
|
||||
mensaje = "Usuario bloqueado";
|
||||
}
|
||||
else if(nMensaje.equals(USUARIO_CADUCADO))
|
||||
{
|
||||
mensaje = "Usuario bloqueado, su clave ha caducado";
|
||||
}
|
||||
else if(nMensaje.equals(USUARIO_PREAVISO))
|
||||
{
|
||||
mensaje = "Por favor cambie su clave de acceso, caduca el día";
|
||||
}
|
||||
else if(nMensaje.equals(USUARIO_INACTIVO))
|
||||
{
|
||||
mensaje = "Usuario bloqueado por período de inactividad";
|
||||
}
|
||||
else if(nMensaje.equals(USUARIO_INTENTOS))
|
||||
{
|
||||
mensaje = "Ha sobrepasado el número máximo de intentos de conexión";
|
||||
}
|
||||
else
|
||||
{
|
||||
mensaje = "Usuario correcto";
|
||||
}
|
||||
return mensaje;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Controla el número de intentos fallidos de conexión a la aplicación utilizando un objeto de sesión.
|
||||
* Si excede al valor del parámetro definido en el fichero de propiedades retornará true, en caso contrario false.
|
||||
* @param sesion La sesión del usuario conectado
|
||||
* @return El resultado de la comprobación del número de intentos habidos.
|
||||
*/
|
||||
private boolean numeroIntentosExcedido(HttpSession sesion)
|
||||
{
|
||||
String strIntentos = (String)sesion.getAttribute("INTENTOS");
|
||||
int nIntentos = 0;
|
||||
if(strIntentos != null)
|
||||
{
|
||||
nIntentos = Integer.parseInt(strIntentos);
|
||||
}
|
||||
sesion.setAttribute("INTENTOS", String.valueOf(++nIntentos));
|
||||
|
||||
if (nIntentos > ParametrosConfiguracion.numeroIntentos)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user