ServletRequestMethodArgumentResolver passes null references through (again)
Issue: SPR-15214
This commit is contained in:
parent
b3ad4229f5
commit
fc11321010
|
@ -121,7 +121,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
private Object resolveArgument(Class<?> paramType, HttpServletRequest request) throws IOException {
|
private Object resolveArgument(Class<?> paramType, HttpServletRequest request) throws IOException {
|
||||||
if (HttpSession.class.isAssignableFrom(paramType)) {
|
if (HttpSession.class.isAssignableFrom(paramType)) {
|
||||||
HttpSession session = request.getSession();
|
HttpSession session = request.getSession();
|
||||||
if (!paramType.isInstance(session)) {
|
if (session != null && !paramType.isInstance(session)) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Current session is not of type [" + paramType.getName() + "]: " + session);
|
"Current session is not of type [" + paramType.getName() + "]: " + session);
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
}
|
}
|
||||||
else if (getPushBuilderMethod != null && getPushBuilderMethod.getReturnType().isAssignableFrom(paramType)) {
|
else if (getPushBuilderMethod != null && getPushBuilderMethod.getReturnType().isAssignableFrom(paramType)) {
|
||||||
Object pushBuilder = ReflectionUtils.invokeMethod(getPushBuilderMethod, request);
|
Object pushBuilder = ReflectionUtils.invokeMethod(getPushBuilderMethod, request);
|
||||||
if (!paramType.isInstance(pushBuilder)) {
|
if (pushBuilder != null && !paramType.isInstance(pushBuilder)) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Current push builder is not of type [" + paramType.getName() + "]: " + pushBuilder);
|
"Current push builder is not of type [" + paramType.getName() + "]: " + pushBuilder);
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
}
|
}
|
||||||
else if (InputStream.class.isAssignableFrom(paramType)) {
|
else if (InputStream.class.isAssignableFrom(paramType)) {
|
||||||
InputStream inputStream = request.getInputStream();
|
InputStream inputStream = request.getInputStream();
|
||||||
if (!paramType.isInstance(inputStream)) {
|
if (inputStream != null && !paramType.isInstance(inputStream)) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Request input stream is not of type [" + paramType.getName() + "]: " + inputStream);
|
"Request input stream is not of type [" + paramType.getName() + "]: " + inputStream);
|
||||||
}
|
}
|
||||||
|
@ -145,7 +145,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
}
|
}
|
||||||
else if (Reader.class.isAssignableFrom(paramType)) {
|
else if (Reader.class.isAssignableFrom(paramType)) {
|
||||||
Reader reader = request.getReader();
|
Reader reader = request.getReader();
|
||||||
if (!paramType.isInstance(reader)) {
|
if (reader != null && !paramType.isInstance(reader)) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Request body reader is not of type [" + paramType.getName() + "]: " + reader);
|
"Request body reader is not of type [" + paramType.getName() + "]: " + reader);
|
||||||
}
|
}
|
||||||
|
@ -153,7 +153,7 @@ public class ServletRequestMethodArgumentResolver implements HandlerMethodArgume
|
||||||
}
|
}
|
||||||
else if (Principal.class.isAssignableFrom(paramType)) {
|
else if (Principal.class.isAssignableFrom(paramType)) {
|
||||||
Principal userPrincipal = request.getUserPrincipal();
|
Principal userPrincipal = request.getUserPrincipal();
|
||||||
if (!paramType.isInstance(userPrincipal)) {
|
if (userPrincipal != null && !paramType.isInstance(userPrincipal)) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Current user principal is not of type [" + paramType.getName() + "]: " + userPrincipal);
|
"Current user principal is not of type [" + paramType.getName() + "]: " + userPrincipal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class ServletRequestMethodArgumentResolverTests {
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setup() throws Exception {
|
||||||
method = getClass().getMethod("supportedParams", ServletRequest.class, MultipartRequest.class,
|
method = getClass().getMethod("supportedParams", ServletRequest.class, MultipartRequest.class,
|
||||||
HttpSession.class, Principal.class, Locale.class, InputStream.class, Reader.class,
|
HttpSession.class, Principal.class, Locale.class, InputStream.class, Reader.class,
|
||||||
WebRequest.class, TimeZone.class, ZoneId.class, HttpMethod.class);
|
WebRequest.class, TimeZone.class, ZoneId.class, HttpMethod.class);
|
||||||
|
@ -112,6 +112,15 @@ public class ServletRequestMethodArgumentResolverTests {
|
||||||
assertSame("Invalid result", principal, result);
|
assertSame("Invalid result", principal, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void principalAsNull() throws Exception {
|
||||||
|
MethodParameter principalParameter = new MethodParameter(method, 3);
|
||||||
|
assertTrue("Principal not supported", resolver.supportsParameter(principalParameter));
|
||||||
|
|
||||||
|
Object result = resolver.resolveArgument(principalParameter, null, webRequest, null);
|
||||||
|
assertNull("Invalid result", result);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void locale() throws Exception {
|
public void locale() throws Exception {
|
||||||
Locale locale = Locale.ENGLISH;
|
Locale locale = Locale.ENGLISH;
|
||||||
|
|
Loading…
Reference in New Issue