Gestión de excepciones en el filtro de autorización.

This commit is contained in:
Marcos Garcia Nuñez
2019-12-20 17:57:07 +01:00
parent ebc33396c7
commit 02ea97195f

View File

@@ -4,6 +4,7 @@ package managedbean.common;
import java.io.IOException; import java.io.IOException;
import javax.faces.application.FacesMessage; import javax.faces.application.FacesMessage;
import javax.persistence.PersistenceException;
import javax.servlet.Filter; import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; import javax.servlet.FilterConfig;
@@ -15,7 +16,10 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.omnifaces.util.Exceptions;
import common.UserType; import common.UserType;
import common.Utils;
@WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" }) @WebFilter(filterName = "AuthFilter", urlPatterns = { "*.xhtml" })
public class AuthorizationFilter implements Filter { 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 { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = null; HttpServletRequest req = null;
HttpServletResponse resp = null; HttpServletResponse resp = null;
HttpSession ses = null;
try { try {
req = (HttpServletRequest) request; req = (HttpServletRequest) request;
String reqURI = req.getRequestURI(); String reqURI = req.getRequestURI();
resp = (HttpServletResponse) response; resp = (HttpServletResponse) response;
HttpSession ses = req.getSession(false); ses = req.getSession(false);
// Para recursos publicos permitimos el acceso exista sesión o no. // 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 if (reqURI.indexOf("/login.xhtml") >= 0 || reqURI.indexOf("/profile/RegisterUser.xhtml") >= 0 || reqURI.indexOf("/home.xhtml") >= 0
@@ -156,6 +161,12 @@ public class AuthorizationFilter implements Filter {
resp.sendRedirect(req.getContextPath() + "/home.xhtml"); resp.sendRedirect(req.getContextPath() + "/home.xhtml");
} catch (Exception e) { } catch (Exception e) {
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"); resp.sendRedirect(req.getContextPath() + "/error.xhtml");
} }
} }