1 package org.openkilda.security.mapper;
3 import static java.util.stream.Collectors.joining;
5 import java.nio.file.AccessDeniedException;
7 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory;
10 import org.springframework.beans.ConversionNotSupportedException;
11 import org.springframework.beans.TypeMismatchException;
12 import org.springframework.http.HttpHeaders;
13 import org.springframework.http.HttpStatus;
14 import org.springframework.http.MediaType;
15 import org.springframework.http.ResponseEntity;
16 import org.springframework.http.converter.HttpMessageNotReadableException;
17 import org.springframework.http.converter.HttpMessageNotWritableException;
18 import org.springframework.util.MultiValueMap;
19 import org.springframework.validation.BindException;
20 import org.springframework.validation.FieldError;
21 import org.springframework.web.HttpMediaTypeNotAcceptableException;
22 import org.springframework.web.HttpMediaTypeNotSupportedException;
23 import org.springframework.web.HttpRequestMethodNotSupportedException;
24 import org.springframework.web.bind.MethodArgumentNotValidException;
25 import org.springframework.web.bind.MissingPathVariableException;
26 import org.springframework.web.bind.MissingServletRequestParameterException;
27 import org.springframework.web.bind.ServletRequestBindingException;
28 import org.springframework.web.bind.annotation.ExceptionHandler;
29 import org.springframework.web.context.request.WebRequest;
30 import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
31 import org.springframework.web.multipart.support.MissingServletRequestPartException;
32 import org.springframework.web.servlet.NoHandlerFoundException;
33 import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
36 import com.fasterxml.jackson.databind.JsonMappingException;
37 import com.fasterxml.jackson.databind.JsonMappingException.Reference;
56 _log.info(
"[GlobalExceptionMapper] Initializing {}...",
62 final HttpRequestMethodNotSupportedException ex,
final HttpHeaders
headers,
63 final HttpStatus
status,
final WebRequest request) {
64 _log.error(
"Exception: " + ex.getMessage(), ex);
72 final HttpMediaTypeNotSupportedException ex,
final HttpHeaders
headers,
73 final HttpStatus
status,
final WebRequest request) {
74 _log.error(
"Exception: " + ex.getMessage(), ex);
82 final HttpMediaTypeNotAcceptableException ex,
final HttpHeaders
headers,
83 final HttpStatus
status,
final WebRequest request) {
84 _log.error(
"Exception: " + ex.getMessage(), ex);
92 final MissingPathVariableException ex,
final HttpHeaders
headers,
93 final HttpStatus
status,
final WebRequest request) {
94 _log.error(
"Exception: " + ex.getMessage(), ex);
101 final MissingServletRequestParameterException ex,
final HttpHeaders
headers,
102 final HttpStatus
status,
final WebRequest request) {
103 _log.error(
"Exception: " + ex.getMessage(), ex);
110 final ServletRequestBindingException ex,
final HttpHeaders
headers,
111 final HttpStatus
status,
final WebRequest request) {
112 _log.error(
"Exception: " + ex.getMessage(), ex);
120 final ConversionNotSupportedException ex,
final HttpHeaders
headers,
121 final HttpStatus
status,
final WebRequest request) {
122 _log.error(
"Exception: " + ex.getMessage(), ex);
130 final HttpHeaders
headers,
final HttpStatus
status,
final WebRequest request) {
131 _log.error(
"Exception: " + ex.getMessage(), ex);
139 final HttpMessageNotReadableException ex,
final HttpHeaders
headers,
140 final HttpStatus
status,
final WebRequest request) {
141 _log.error(
"Exception: " + ex.getMessage(), ex);
142 String message =
new String();
143 if (ex.getCause() instanceof JsonMappingException) {
144 StringBuilder msg =
new StringBuilder();
145 JsonMappingException jme = (JsonMappingException) ex.getCause();
146 for (Reference reference : jme.getPath()) {
147 msg.append(reference.getFieldName()).append(
" -> ");
149 if (msg.length() > 0) {
150 msg.setLength(msg.length() - 3);
151 msg.append(
": INVALID.");
153 message = msg.toString();
155 message = ex.getMessage();
164 final HttpMessageNotWritableException ex,
final HttpHeaders
headers,
165 final HttpStatus
status,
final WebRequest request) {
166 _log.error(
"Exception: " + ex.getMessage(), ex);
174 final MethodArgumentNotValidException ex,
final HttpHeaders
headers,
175 final HttpStatus
status,
final WebRequest request) {
176 _log.error(
"Exception: " + ex.getMessage(), ex);
177 String message = ex.getBindingResult().getFieldErrors().stream()
178 .map(FieldError::getDefaultMessage).collect(joining(
", "));
185 final MissingServletRequestPartException ex,
final HttpHeaders
headers,
186 final HttpStatus
status,
final WebRequest request) {
187 _log.error(
"Exception: " + ex.getMessage(), ex);
194 final HttpHeaders
headers,
final HttpStatus
status,
final WebRequest request) {
195 _log.error(
"Exception: " + ex.getMessage(), ex);
196 String message = ex.getFieldErrors().stream().map(FieldError::getDefaultMessage)
197 .collect(joining(
", "));
204 final HttpHeaders
headers,
final HttpStatus
status,
final WebRequest request) {
205 _log.error(
"Exception: " + ex.getMessage(), ex);
213 final AsyncRequestTimeoutException ex,
final HttpHeaders
headers,
214 final HttpStatus
status,
final WebRequest webRequest) {
215 return super.handleAsyncRequestTimeoutException(ex,
headers,
status, webRequest);
227 protected ResponseEntity<Object>
response(
final HttpStatus
status,
final Integer code,
228 final String auxilaryMessage,
final String message) {
229 MultiValueMap<String, String>
headers =
new HttpHeaders();
230 headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
231 return new ResponseEntity<Object>(
new ErrorMessage(code, message, auxilaryMessage),
headers,
245 protected ResponseEntity<Object>
response(
final HttpStatus
status,
final Integer code,
246 final String auxilaryMessage,
final String message,
final String correlationId) {
247 MultiValueMap<String, String>
headers =
new HttpHeaders();
248 headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
249 return new ResponseEntity<Object>(
262 ex.setStackTrace(
new StackTraceElement[0]);
265 ex.getMessage(), ex.getMessage());
274 @ExceptionHandler(AccessDeniedException.class)
276 AccessDeniedException ex) {
277 ex.setStackTrace(
new StackTraceElement[0]);
280 ex.getMessage(), ex.getMessage());
291 ex.setStackTrace(
new StackTraceElement[0]);
294 ex.getMessage(), ex.getMessage());
306 ex.setStackTrace(
new StackTraceElement[0]);
309 ex.getMessage(), ex.getMessage());
ResponseEntity< Object > handleServletRequestBindingException(final ServletRequestBindingException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > unauthorizeAccess(AccessDeniedException ex)
ResponseEntity< Object > handleMissingServletRequestParameter(final MissingServletRequestParameterException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleMethodArgumentNotValid(final MethodArgumentNotValidException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleNoHandlerFoundException(final NoHandlerFoundException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > invalidOTP(InvalidOtpException ex)
ResponseEntity< Object > response(final HttpStatus status, final Integer code, final String auxilaryMessage, final String message, final String correlationId)
ResponseEntity< Object > handleMissingPathVariable(final MissingPathVariableException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleAsyncRequestTimeoutException(final AsyncRequestTimeoutException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest webRequest)
ResponseEntity< Object > handleConversionNotSupported(final ConversionNotSupportedException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleHttpMessageNotReadable(final HttpMessageNotReadableException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleEntityNotFound(RequestValidationException ex)
ResponseEntity< Object > handleTypeMismatch(final TypeMismatchException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleHttpMediaTypeNotSupported(final HttpMediaTypeNotSupportedException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleMissingServletRequestPart(final MissingServletRequestPartException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleHttpMediaTypeNotAcceptable(final HttpMediaTypeNotAcceptableException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleHttpMessageNotWritable(final HttpMessageNotWritableException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > handleHttpRequestMethodNotSupported(final HttpRequestMethodNotSupportedException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)
ResponseEntity< Object > response(final HttpStatus status, final Integer code, final String auxilaryMessage, final String message)
ResponseEntity< Object > twoFaKeyNotSetException(TwoFaKeyNotSetException ex)
ResponseEntity< Object > handleBindException(final BindException ex, final HttpHeaders headers, final HttpStatus status, final WebRequest request)