Spring CSRF token does not work, when the request to be sent is a multipart request

前端 未结 5 579
情歌与酒
情歌与酒 2020-11-27 22:24

I use,

  • Spring Framework 4.0.0 RELEASE (GA)
  • Spring Security 3.2.0 RELEASE (GA)
  • Struts 2.3.16

In which, I use an in-built securi

5条回答
  •  佛祖请我去吃肉
    2020-11-27 22:59

    If you are using @annotations, and the jsp view like this:

        
                 ...
                
                 ...
                
        
    

    this may help:

    AppConfig.java :

    @EnableWebMvc
    @Configuration
    @Import({ SecurityConfig.class })
    public class AppConfig {
    
       @Bean(name = "filterMultipartResolver")
       public CommonsMultipartResolver filterMultipartResolver() {
          CommonsMultipartResolver filterMultipartResolver = new CommonsMultipartResolver();
          filterMultipartResolver.setDefaultEncoding("utf-8");
          // resolver.setMaxUploadSize(512000);
          return filterMultipartResolver;
    }
    ...
    

    The SecurityConfig.java extends WebSecurityConfigurerAdapter and is the configuration for SpringSecurity

    The multipart/form-data filter (MultipartFilter) needs to be registered before the SecurityConfig that enables the CSRF. You can do it with this:

    SecurityInitializer.java:

    public class SecurityInitializer extends
    AbstractSecurityWebApplicationInitializer {
    
    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
       super.beforeSpringSecurityFilterChain(servletContext);
    
       // CSRF for multipart form data filter:
       FilterRegistration.Dynamic springMultipartFilter;
       springMultipartFilter = servletContext.addFilter(
        "springMultipartFilter", new MultipartFilter());
       springMultipartFilter.addMappingForUrlPatterns(null, false, "/*");
    
    }
    }
    

提交回复
热议问题