Skip to content

Commit 2a70157

Browse files
authored
Short log for RequestRejectedException and IllegalArgumentException (#7502)
1 parent f43f098 commit 2a70157

3 files changed

Lines changed: 47 additions & 14 deletions

File tree

orcid-api-common/src/main/java/org/orcid/api/common/jaxb/OrcidExceptionMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ public Response toResponse(Throwable t) {
142142
logShortError(t, clientId);
143143
} else if (t instanceof SearchStartParameterLimitExceededException) {
144144
logShortError(t, clientId);
145+
} else if (t instanceof IllegalArgumentException) {
146+
logShortError(t, clientId);
145147
} else if (t instanceof InvalidDisambiguatedOrgException) {
146148
LOGGER.error("Error for client ID: " + clientId + "InvalidDisambiguatedOrgException: Disambiguated org is empty or null");
147149
} else {

orcid-core/src/main/java/org/orcid/core/oauth/service/OrcidRandomValueTokenServicesImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ private OAuth2Authentication loadAuthenticationFromAuthorizationServer(String ac
294294
throw new InvalidTokenException("Invalid access token: " + accessTokenValue);
295295
}
296296
}
297-
} catch(InvalidTokenException i) {
297+
} catch(IllegalArgumentException | InvalidTokenException i) {
298298
throw i;
299299
} catch(Exception e) {
300300
LOGGER.error("Exception validating token from authorization server", e);

orcid-core/src/main/java/org/orcid/core/web/filters/AcceptFilter.java

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,15 @@
1919
import javax.servlet.http.HttpServletResponse;
2020
import javax.ws.rs.core.MediaType;
2121

22+
import com.fasterxml.jackson.databind.ObjectMapper;
2223
import org.orcid.core.manager.impl.OrcidUrlManager;
24+
import org.orcid.jaxb.model.v3.release.error.OrcidError;
25+
import org.slf4j.Logger;
26+
import org.slf4j.LoggerFactory;
27+
import org.springframework.http.HttpStatus;
28+
import org.springframework.http.ResponseEntity;
29+
import org.springframework.security.web.firewall.RequestRejectedException;
30+
import org.springframework.web.context.request.ServletWebRequest;
2331
import org.springframework.web.filter.OncePerRequestFilter;
2432

2533
/**
@@ -29,31 +37,54 @@
2937
*/
3038

3139
public class AcceptFilter extends OncePerRequestFilter {
32-
40+
private static final Logger LOGGER = LoggerFactory.getLogger(AcceptFilter.class);
3341
private static String[] accpetTypesArray = { VND_ORCID_XML, ORCID_XML, MediaType.APPLICATION_XML, VND_ORCID_JSON, ORCID_JSON, MediaType.APPLICATION_JSON, TEXT_TURTLE,
3442
TEXT_N3, N_TRIPLES, JSON_LD, APPLICATION_RDFXML };
3543

3644
@Override
3745
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
38-
String accept = request.getHeader("accept");
39-
String path = ((HttpServletRequest) request).getRequestURI();
40-
String contentType = request.getHeader("Content-Type");
46+
try {
47+
String accept = request.getHeader("accept");
48+
String contentType = request.getHeader("Content-Type");
4149

42-
if (accept == null || accept.equals("*/*")) {
43-
HttpServletRequestWrapper requestWrapper = null;
44-
if (isValidAcceptType(contentType))
45-
requestWrapper = new AcceptHeaderRequestWrapper(request, contentType);
46-
else
47-
if (isStandardJsonRequest(request))
50+
if (accept == null || accept.equals("*/*")) {
51+
HttpServletRequestWrapper requestWrapper = null;
52+
if (isValidAcceptType(contentType))
53+
requestWrapper = new AcceptHeaderRequestWrapper(request, contentType);
54+
else if (isStandardJsonRequest(request))
4855
requestWrapper = new AcceptHeaderRequestWrapper(request, MediaType.APPLICATION_JSON);
4956
else
5057
requestWrapper = new AcceptHeaderRequestWrapper(request, VND_ORCID_XML);
51-
filterChain.doFilter(requestWrapper, response);
52-
} else {
53-
filterChain.doFilter(request, response);
58+
filterChain.doFilter(requestWrapper, response);
59+
} else {
60+
filterChain.doFilter(request, response);
61+
}
62+
} catch (RequestRejectedException e) {
63+
if(request.getRequestURI() != null) {
64+
logger.warn(request.getRequestURI() + ":" + e.getMessage());
65+
} else {
66+
logger.warn(e.getMessage());
67+
}
68+
ResponseEntity<OrcidError> errorResponseEntity = buildErrorResponseEntity(HttpStatus.BAD_REQUEST, e.getMessage());
69+
new ObjectMapper().writeValue(response.getWriter(), errorResponseEntity);
70+
response.flushBuffer();
71+
} catch (IllegalArgumentException e) {
72+
logger.warn(e.getMessage());
73+
ResponseEntity<OrcidError> errorResponseEntity = buildErrorResponseEntity(HttpStatus.BAD_REQUEST, e.getMessage());
74+
new ObjectMapper().writeValue(response.getWriter(), errorResponseEntity);
75+
response.flushBuffer();
5476
}
5577
}
5678

79+
private ResponseEntity<OrcidError> buildErrorResponseEntity(HttpStatus status, String message) {
80+
OrcidError orcidError = new OrcidError();
81+
orcidError.setResponseCode(status.value());
82+
orcidError.setDeveloperMessage(message);
83+
orcidError.setUserMessage(message);
84+
ResponseEntity<OrcidError> errorResponseEntity = new ResponseEntity<>(orcidError, status);
85+
return errorResponseEntity;
86+
}
87+
5788
private boolean isStandardJsonRequest(HttpServletRequest request) {
5889
String path = OrcidUrlManager.getPathWithoutContextPath(request);
5990
return path.startsWith("/oauth/") || path.endsWith("/pubStatus") || path.endsWith("/apiStatus");

0 commit comments

Comments
 (0)