diff --git a/openid-connect-server-webapp/src/main/java/org/mitre/openid/connect/ErrorController.java b/openid-connect-server-webapp/src/main/java/org/mitre/openid/connect/ErrorController.java new file mode 100644 index 0000000000..7a95e65313 --- /dev/null +++ b/openid-connect-server-webapp/src/main/java/org/mitre/openid/connect/ErrorController.java @@ -0,0 +1,49 @@ +package org.mitre.openid.connect; + +import javax.servlet.RequestDispatcher; +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.security.oauth2.common.exceptions.OAuth2Exception; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class ErrorController { + + private static final Logger logger = LoggerFactory.getLogger(ErrorController.class); + + @RequestMapping("/error") + public String handle(HttpServletRequest req) { + Throwable errorException = (Throwable) req.getAttribute(RequestDispatcher.ERROR_EXCEPTION); + String message = (String) req.getAttribute(RequestDispatcher.ERROR_MESSAGE); + String requestUri = (String) req.getAttribute(RequestDispatcher.ERROR_REQUEST_URI); + + logger.error("request {} failed with {}", requestUri, message); + logger.error("exception", errorException); + + processError(req); + return "/error-view"; + } + + private void processError(HttpServletRequest request) { + if (request.getAttribute("error") instanceof OAuth2Exception) { + request.setAttribute("errorCode", ((OAuth2Exception)request.getAttribute("error")).getOAuth2ErrorCode()); + request.setAttribute("message", ((OAuth2Exception)request.getAttribute("error")).getMessage()); + } else if (request.getAttribute(RequestDispatcher.ERROR_EXCEPTION) != null) { + Throwable t = (Throwable)request.getAttribute(RequestDispatcher.ERROR_EXCEPTION); + request.setAttribute("errorCode", t.getClass().getSimpleName() + " (" + request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE) + ")"); + request.setAttribute("message", t.getMessage()); + } else if (request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE) != null) { + Integer code = (Integer)request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); + HttpStatus status = HttpStatus.valueOf(code); + request.setAttribute("errorCode", status.toString() + " " + status.getReasonPhrase()); + request.setAttribute("message", request.getAttribute(RequestDispatcher.ERROR_MESSAGE)); + } else { + request.setAttribute("errorCode", "Server error"); + request.setAttribute("message", "See the logs for details"); + } + } +} diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml index 3b7a4faa87..e1bee6e61a 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml +++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/authz-config.xml @@ -55,6 +55,6 @@ - + \ No newline at end of file diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/error.jsp b/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/error.jsp index 66c5f585ed..86d3c28850 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/error.jsp +++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/views/error.jsp @@ -4,27 +4,7 @@ <%@ taglib prefix="o" tagdir="/WEB-INF/tags"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="security" uri="http://www.springframework.org/security/tags"%> -<%@page import="org.springframework.security.oauth2.common.exceptions.OAuth2Exception"%> -<% -if (request.getAttribute("error") != null && request.getAttribute("error") instanceof OAuth2Exception) { - request.setAttribute("errorCode", ((OAuth2Exception)request.getAttribute("error")).getOAuth2ErrorCode()); - request.setAttribute("message", ((OAuth2Exception)request.getAttribute("error")).getMessage()); -} else if (request.getAttribute("javax.servlet.error.exception") != null) { - Throwable t = (Throwable)request.getAttribute("javax.servlet.error.exception"); - request.setAttribute("errorCode", t.getClass().getSimpleName() + " (" + request.getAttribute("javax.servlet.error.status_code") + ")"); - request.setAttribute("message", t.getMessage()); -} else if (request.getAttribute("javax.servlet.error.status_code") != null) { - Integer code = (Integer)request.getAttribute("javax.servlet.error.status_code"); - HttpStatus status = HttpStatus.valueOf(code); - request.setAttribute("errorCode", status.toString() + " " + status.getReasonPhrase()); - request.setAttribute("message", request.getAttribute("javax.servlet.error.message")); -} else { - request.setAttribute("errorCode", "Server error"); - request.setAttribute("message", "See the logs for details"); -} - -%> @@ -38,11 +18,9 @@ if (request.getAttribute("error") != null && request.getAttribute("error") insta

-

- +

- - + diff --git a/openid-connect-server-webapp/src/main/webapp/WEB-INF/web.xml b/openid-connect-server-webapp/src/main/webapp/WEB-INF/web.xml index 618db1df4a..538d3c6639 100644 --- a/openid-connect-server-webapp/src/main/webapp/WEB-INF/web.xml +++ b/openid-connect-server-webapp/src/main/webapp/WEB-INF/web.xml @@ -71,9 +71,9 @@ true - + - /error + /errorController - + diff --git a/pom.xml b/pom.xml index 6824f13603..6763854e53 100644 --- a/pom.xml +++ b/pom.xml @@ -404,8 +404,8 @@ javax.servlet - servlet-api - 2.5 + javax.servlet-api + 3.0.1 provided @@ -644,7 +644,7 @@ javax.servlet - servlet-api + javax.servlet-api javax.servlet.jsp