Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.gs.config; import com.sigsa.sisbc.daoimp.SessionFailDaoImp; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.DisabledException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.AuthenticationException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.session.SessionAuthenticationException; /** * * @author SIGSA */ public class ItemBasedAuthenticationFailureHandler implements AuthenticationFailureHandler { SessionFailDaoImp sessionFailDaoImp; ListUsersLockoutIntentFail listUsersLockoutIntentFail; private UsuarioConIntentoFallido usuarioConIntentoFallido; private int tiempoLockout; public UsuarioConIntentoFallido getUsuarioConIntentoFallido() { return usuarioConIntentoFallido; } public SessionFailDaoImp getSessionFailDaoImp() { return sessionFailDaoImp; } public void setSessionFailDaoImp(SessionFailDaoImp sessionFailDaoImp) { this.sessionFailDaoImp = sessionFailDaoImp; } public void setUsuarioConIntentoFallido(UsuarioConIntentoFallido usuarioConIntentoFallido) { this.usuarioConIntentoFallido = usuarioConIntentoFallido; } public ListUsersLockoutIntentFail getListUsersLockoutIntentFail() { return listUsersLockoutIntentFail; } public void setListUsersLockoutIntentFail(ListUsersLockoutIntentFail listUsersLockoutIntentFail) { this.listUsersLockoutIntentFail = listUsersLockoutIntentFail; } public int getTiempoLockout() { return tiempoLockout; } public void setTiempoLockout(int tiempoLockout) { this.tiempoLockout = tiempoLockout * 60 * 1000; } @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { UsernamePasswordAuthenticationToken user = (UsernamePasswordAuthenticationToken) exception .getAuthentication(); //System.out.println("Mensaje del error: "+exception.getMessage()); // PrincipalsessionInformaction user = request.getUserPrincipal(); System.out.println("-----------------------------INTENTO FALLIDO-----------------------------"); //Causas de la autenticacin fallida if (exception.getClass().isAssignableFrom(UsernameNotFoundException.class)) { // System.out.println("INTENTO FALLIDO: El usuario no est registrado en la base de datos "); request.setAttribute("ERRORSESSION", "Usuario no registrado, verifique con el administrador"); request.getRequestDispatcher("login?err=1").forward(request, response); //response.sendRedirect("login?err=1"); } else if (exception.getClass().isAssignableFrom(BadCredentialsException.class)) { sessionFailDaoImp.insertUserSessionFail(user.getName(), request.getLocalAddr()); usuarioConIntentoFallido.addIntentoUsuario(user.getName()); // System.out.println("INTENTO FALLIDO: Creedenciales erroneas"); request.setAttribute("ERRORSESSION", "Contrasea incorrecta, intente nuevamente"); request.getRequestDispatcher("login?err=1").forward(request, response); //response.sendRedirect("login?err=2"); } else if (exception.getClass().isAssignableFrom(DisabledException.class)) { // System.out.println("INTENTO FALLIDO: Usuario desabilitado"); request.setAttribute("ERRORSESSION", "Usuario deshabilitado, verifique con el administrador"); request.getRequestDispatcher("login?err=1").forward(request, response); //response.sendRedirect("login?err=3"); } else if (exception.getClass().isAssignableFrom(SessionAuthenticationException.class)) { // System.out.println("INTENTO FALLIDO: Usuario ya logeado"); request.setAttribute("ERRORSESSION", "Ya existe una sesin abierta con este usuario"); request.getRequestDispatcher("login?err=1").forward(request, response); //response.sendRedirect("login?err=4"); } else if (exception.getClass().isAssignableFrom(IntentLimitExceeded.class)) { // System.out.println("INTENTO FALLIDO: NMERO DE INTENTOS EXCEDIDOS"); //Elimino al usuario de la listo de los intentos y se agrega a la lista de usuarios bloqueados usuarioConIntentoFallido.removeUsuario(user.getName()); //Se crea el hilo para desbloquear al usuario listUsersLockoutIntentFail.addBlockUserFail(user.getName(), tiempoLockout); //request.setAttribute("ERRORSESSION", "Ha excedido el lmite de intentos. Por favor espere unos minutos e intente nuevamente"); request.getRequestDispatcher("intentlimit").forward(request, response); } else { // System.out.println("INTENTO FALLIDO: NO SE QUE PASO"); request.setAttribute("ERRORSESSION", "No ha sido posible iniciar sesin"); request.getRequestDispatcher("login?err=1").forward(request, response); } } }