Implementación con Struts : Cambio de Contraseña
Planteamiento
Necesitamos implementar en una aplicación web basada en Struts un cambio de contraseña de los usuarios de la aplicación.
El usuario al olvidar su contraseña, solicitará que se le resetee su contraseña. Para ello debe introducir su identificador de usuario (login). En ese momento se busca la dirección de correo electrónico del usuario introducido, se genera una contraseña nueva, y se envían los datos a una servlet que cambiará en el LDAP la contraseña del usuario, que devolverá el resultado de la operación (ok – ko).
Ya está implementado el jsp que solicita los datos del usuario. Este jsp también busca la dirección de correo electrónico y genera una nueva contaseña.
Requisitos
- Recibir el identificador de usuario y la contraseña.
- Modificar la contaseña en el LDAP.
- Devolver el resultado de la modificación (ok-ko)
Análisis y Diseño
- ActionForm, que transportará los datos a recibir.
- Action, que leerá el formulario, ejecutará la modificación y devolverá su resultado.
- DAO, implementará la función de modificar contraseña.
Implementación
-
ActionForm
package com.bne.pde.PDE02Usuarios.form; import com.bne.pde.PDE000Arquitectura.form.J000001_PdEForm; public class J002002_CambioContrasennaForm extends J000001_PdEForm { private String stNombreUsuarioRed = ""; private String stNuevaContrasenna = ""; public String getStNombreUsuarioRed() { return stNombreUsuarioRed; } public void setStNombreUsuarioRed(String stNombreUsuarioRed) { this.stNombreUsuarioRed = stNombreUsuarioRed; } public String getStNuevaContrasenna() { return stNuevaContrasenna; } public void setStNuevaContrasenna(String stNuevaContrasenna) { this.stNuevaContrasenna = stNuevaContrasenna; } }
J000001_PdEForm implementa un ActionForm
-
Action
package com.bne.pde.PDE002Usuarios.action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import com.bne.pde.PDE000Arquitectura.action.J000001_PdEAction; import com.bne.pde.PDE000Arquitectura.util.J000001_Constantes; public class J002002_CambioContrasennaAction extends J000001_PdEAction { public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request, HttpServletResponse response) { J002002_CambioContrasennaForm cambioForm = (J002002_CambioContrasennaForm) form; String stDestino = J000001_Constantes.stError; try { modificarContrasenna (cambioForm.getStNombreUsuarioRed(), cambioForm.getStNuevaContrasenna); stDestino = J000001_Constantes.stCorrecto; } return mapping.findForward(stDestino); } private void modificarContrasenna (String login, String contrasenna) { J002001_UsuarioDAO usuarioDAO = new J002001_UsuarioDAO (); try { usuarioDAO.resetearContrasennaUsuarioPdE(login, contrasenna); } catch (Exception e) { request.setAttribute("000Error", new J000010_MensajeModel ("ERROR_DAO", "")); objTrazas.error("J002002_CambioContrasennaAction.modificarContrasenna – Capturamos excepcion. " + e.toString()); } } }
J000001_PdEAction implementa un Action.
-
DAO
… /** * * @param stNombreUsuarioRed * @param stNuevaContrasenna * @throws Exception */ public void resetearContrasennaUsuarioPdE (String stNombreUsuarioRed, String stNuevaContrasenna) throws Exception { if (J000020_UsuarioIFC.esContrasennaUsuarioValida(stNuevaContrasenna)) { User user = new User (); try { user = J000999_OpenCitiesFACADE.consultarUsuarioOpenCities_ByLogin(stNombreUsuarioRed); user.setPassword ( OpencitiesUtil.encrypt(stNuevaContrasenna) ); modificarUsuarioPdE (J000999_OpenCitiesFACADE.formateaUsuarioOpenCities_to_PdE(user), "", "", ""); } catch (Exception e) { objTrazas.error("J002001_UsuarioDAO.modificarContrasenna – Excepcion : " + e.toString ()); throw e; } } else { objTrazas.error("J002001_UsuarioDAO.modificarContrasenna – contrasenna formato incorrecta."); throw new J000000_PdEException ("CONTRASENNA_FORMATO_INVALIDO", "La contrasenna del usuario " + stNombreUsuarioRed + " no tiene un formato correcto."); } } …


