Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save aweigold/6213209 to your computer and use it in GitHub Desktop.
Save aweigold/6213209 to your computer and use it in GitHub Desktop.
Using a MultpartRequestResolver with Spring and using Spring Security concurrently http://www.adamweigold.com/2012/01/using-multpartrequestresolvers-with.html This will not work with Spring 3.1. This is due to the ServletRequestMethodArgumentResolver being added by default prior to custom argument resolvers in a private method in the RequestMapp…
public class SecurityContextWrappedMultipartRequestArgumentResolver implements WebArgumentResolver {
private final CommonsMultipartResolver commonsMultipartResolver;
public SecurityContextWrappedMultipartRequestArgumentResolver(){
this.commonsMultipartResolver = new CommonsMultipartResolver();
}
@Override
public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
if (MultipartHttpServletRequest.class.equals(methodParameter.getParameterType())) {
Object object = webRequest.getNativeRequest();
if (! (object instanceof SecurityContextHolderAwareRequestWrapper)) {
return UNRESOLVED;
}
HttpServletRequest request = (HttpServletRequest) object;
if (!ServletFileUpload.isMultipartContent(request)) {
return UNRESOLVED;
}
SecurityContextHolderAwareRequestWrapper requestWrapper = (SecurityContextHolderAwareRequestWrapper) request;
return commonsMultipartResolver.resolveMultipart(requestWrapper);
}
return UNRESOLVED;
}
}
//Then wire up the HandlerAdapter (your config may vary)
@Bean
public HandlerAdapter handlerAdapter() {
final AnnotationMethodHandlerAdapter handlerAdapter = new AnnotationMethodHandlerAdapter();
handlerAdapter.setCustomArgumentResolver(new SecurityContextWrappedMultipartRequestArgumentResolver());
handlerAdapter.setAlwaysUseFullPath(true);
List<HttpMessageConverter<?>> converterList = new ArrayList<HttpMessageConverter<?>>();
converterList.addAll(Arrays.asList(handlerAdapter.getMessageConverters()));
converterList.add(jibxHttpMessageConverter);
converterList.add(gsonHttpMessageConverter);
converterList.add(csvLocalizationConverter);
converterList.add(protobufLocalizationConverter);
handlerAdapter.setMessageConverters(converterList.toArray(new HttpMessageConverter[converterList.size()]));
return handlerAdapter;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment