diff --git a/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java b/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java index b8c0a5a..3c1c34e 100644 --- a/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java +++ b/1.sources/MyHealth/src/managedbean/common/AuthorizationFilter.java @@ -4,6 +4,7 @@ package managedbean.common; import java.io.IOException; import javax.faces.application.FacesMessage; +import javax.persistence.PersistenceException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; @@ -15,7 +16,10 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import org.omnifaces.util.Exceptions; + import common.UserType; +import common.Utils; @WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" }) public class AuthorizationFilter implements Filter { @@ -41,13 +45,14 @@ public class AuthorizationFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = null; HttpServletResponse resp = null; + HttpSession ses = null; try { req = (HttpServletRequest) request; String reqURI = req.getRequestURI(); resp = (HttpServletResponse) response; - HttpSession ses = req.getSession(false); + ses = req.getSession(false); // Para recursos publicos permitimos el acceso exista sesión o no. if (reqURI.indexOf("/login.xhtml") >= 0 || reqURI.indexOf("/profile/RegisterUser.xhtml") >= 0 || reqURI.indexOf("/home.xhtml") >= 0 @@ -156,7 +161,13 @@ public class AuthorizationFilter implements Filter { resp.sendRedirect(req.getContextPath() + "/home.xhtml"); } catch (Exception e) { - resp.sendRedirect(req.getContextPath() + "/error.xhtml"); + if (Exceptions.is(e, PersistenceException.class) == true) { + if (ses != null) + SessionUtils.addMessage(ses, FacesMessage.SEVERITY_ERROR, "Error al intentar acceder a la base de datos", Utils.getExceptionRootCause(e).getLocalizedMessage()); + + resp.sendRedirect(req.getContextPath() + "/error.xhtml?type=sql"); + } else + resp.sendRedirect(req.getContextPath() + "/error.xhtml"); } }