Загрузка файла в Struts2 вместе с токеном Spring CSRF

Я использую,

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

В котором я использую встроенный токен безопасности для защиты от CSRF-атак.



    

Это многокомпонентный запрос, в котором токен CSRF недоступен для безопасности Spring, если толькоMultipartFilter вместе сMultipartResolver правильно настроен так, чтобы Spring-запрос обрабатывал составные запросы.

MultipartFilter вweb.xml настраивается следующим образом.




    
        contextConfigLocation
        
            /WEB-INF/applicationContext.xml
            /WEB-INF/spring-security.xml
        
    

    
        MultipartFilter
        org.springframework.web.multipart.support.MultipartFilter
    

    
        springSecurityFilterChain
        org.springframework.web.filter.DelegatingFilterProxy
    

    
        MultipartFilter
        /*
    

    
        springSecurityFilterChain
        /*
    

    
        AdminLoginNocacheFilter
        filter.AdminLoginNocacheFilter
    

    
        AdminLoginNocacheFilter
        /admin_login/*
    

    
        NoCacheFilter
        filter.NoCacheFilter
    
    
        NoCacheFilter
        /admin_side/*
    

    
        org.springframework.web.context.ContextLoaderListener
    

    
        Description
        org.springframework.web.context.request.RequestContextListener
    

    
        org.springframework.security.web.session.HttpSessionEventPublisher
    

    
        struts2
        org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        
            struts.devMode
            true
        
    

    
        struts2
        /*
    

    
        
            30
        
    
    
        index.jsp
    

И в ,applicationContext.xmlMultipartResolver регистрируется следующим образом.



    

Токен CSRF теперь получен Spring Security, но при этом возникает другая проблема в Struts.

Загруженные файлы сейчасnull в Struts действие классов происходит следующим образом.

@Namespace("/admin_side")
@ResultPath("/WEB-INF/content")
@ParentPackage(value="struts-default")
public final class CategoryAction extends ActionSupport implements Serializable, ValidationAware, ModelDriven
{
    private File fileUpload;
    private String fileUploadContentType;
    private String fileUploadFileName;
    private static final long serialVersionUID = 1L;

    //Getters and setters.

    //Necessary validators as required.
    @Action(value = "AddCategory",
        results = {
            @Result(name=ActionSupport.SUCCESS, type="redirectAction", params={"namespace", "/admin_side", "actionName", "Category"}),
            @Result(name = ActionSupport.INPUT, location = "Category.jsp")},
        interceptorRefs={
            @InterceptorRef(value="defaultStack", "validation.validateAnnotatedMethodOnly", "true"})
        })
    public String insert(){
        //fileUpload, fileUploadContentType and fileUploadFileName are null here after the form is submitted.
        return ActionSupport.SUCCESS;
    }

    @Action(value = "Category",
            results = {
                @Result(name=ActionSupport.SUCCESS, location="Category.jsp"),
                @Result(name = ActionSupport.INPUT, location = "Category.jsp")},
            interceptorRefs={
                @InterceptorRef(value="defaultStack", params={ "validation.validateAnnotatedMethodOnly", "true", "validation.excludeMethods", "load"})})
    public String load() throws Exception{
        //This method is just required to return an initial view on page load.
        return ActionSupport.SUCCESS;
    }
}

Это происходит потому, что, по моему мнению,многочастный запрос Spring уже обработан и используется, следовательно, он не доступен для Struts в качестве составного запроса и, следовательно, объект файла в классе действий Struts имеет значение.null

Есть ли способ обойти эту ситуацию? В противном случае, у меня осталась единственная возможность добавить токен к URL-адресу в качестве параметра строки запроса, который крайне не рекомендуется и не рекомендуется вообще.


    ...

Короче : Как получить файлы в классе действий Struts, если Spring создан для обработки многочастного запроса? С другой стороны, если веснане затем для обработки составного запроса создается токен безопасности. Как преодолеть эту ситуацию?

Ответы на вопрос(4)

Ваш ответ на вопрос