import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
+import lombok.extern.slf4j.Slf4j;
+
/**
* Resolves a user ID from an HTTP header and injects it into a parameter of type {@link String} annotated with {@link
* UserId}. The header is considered mandatory, therefore an error is returned to the client if no user ID was sent.
* @author evitaliy
* @since 21 Aug 2018
*/
+@Slf4j
public class UserIdResolver implements HandlerMethodArgumentResolver {
private static final String ERROR_MESSAGE = "Missing mandatory request header '" + USER_ID_HEADER + "'";
HttpServletRequest httpServletRequest = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
String userHeader = Objects.requireNonNull(httpServletRequest).getHeader(USER_ID_HEADER);
if (userHeader == null) {
- throw new ServletRequestBindingException(ERROR_MESSAGE);
+ log.debug(USER_ID_HEADER + " header not set. Defaulting to cs0008");
+ return "cs0008";
}
return userHeader;
}
-}
\ No newline at end of file
+}
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
}
@Test
+ @Disabled("A default user id is now returned when there is no USER_ID header")
public void shouldReturnErrorWhenMissingUserIdInGetReqHeader() throws Exception {
Workflow workflowMock = createWorkflow(1, true, ArchivingStatus.ACTIVE);
mockMvc.perform(get(RestPath.getWorkflowPath(workflowMock.getId())).contentType(APPLICATION_JSON))
}
@Test
+ @Disabled("A default user id is now returned when there is no USER_ID header")
public void shouldReturnErrorWhenMissingUserIdInListReqHeader() throws Exception {
mockMvc.perform(get(RestPath.getWorkflowsPath()).contentType(APPLICATION_JSON))
.andExpect(status().isBadRequest()).andExpect(jsonPath("$.message", is(MISSING_USER_HEADER_ERROR)));
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.context.request.NativeWebRequest;
+import lombok.SneakyThrows;
+
/**
* Tests injection of user ID from HTTP headers.
*
}
@Test
+ @SneakyThrows
public void missingHeaderErrorThrownWhenUserIdHeaderNotPopulated() {
- assertThrows(ServletRequestBindingException.class, () -> {
- NativeWebRequest webRequestMock = mock(NativeWebRequest.class);
- when(webRequestMock.getNativeRequest(HttpServletRequest.class)).thenReturn(mock(HttpServletRequest.class));
- new UserIdResolver().resolveArgument(null, null, webRequestMock, null);
- });
+ NativeWebRequest webRequestMock = mock(NativeWebRequest.class);
+ when(webRequestMock.getNativeRequest(HttpServletRequest.class)).thenReturn(mock(HttpServletRequest.class));
+ String userId = (String) new UserIdResolver().resolveArgument(null, null, webRequestMock, null);
+ assertEquals("cs0008", userId);
+
}
@Test
when(methodParameterMock.getParameterType()).thenReturn((Class) String.class);
assertTrue(new UserIdResolver().supportsParameter(methodParameterMock));
}
-}
\ No newline at end of file
+}