Last active
December 20, 2015 23:29
-
-
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…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//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