All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.yadaframework.security.web.YadaActionUploadAttrProcessor Maven / Gradle / Ivy

The newest version!
package net.yadaframework.security.web;

import org.springframework.security.web.csrf.CsrfToken;
import org.thymeleaf.IEngineConfiguration;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.engine.AttributeName;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractAttributeTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.standard.expression.IStandardExpression;
import org.thymeleaf.standard.expression.IStandardExpressionParser;
import org.thymeleaf.standard.expression.StandardExpressions;
import org.thymeleaf.templatemode.TemplateMode;

// TODO this used to be included in the "yada" dialect before splitting the YadaWebSecurity project.
// Now it's not used anymore, waiting for a new "yadasec" dialect

/**
 * Serve solo se il csrf è attivo.
 * Questa classe aggiunge il tag yada:actionUpload da usare quando si fa multipart file upload con Spring Security e la dimensione massima del file settata.
 * Vedi http://stackoverflow.com/questions/23856254/how-to-nicely-handle-file-upload-maxuploadsizeexceededexception-with-spring-secu
 * Senza questo tag, Spring Security lancia un 403 Forbidden quando il max filesize specificato nel filtro viene superato, e non si arriva al Controller.
 * Con questo tag (e il workaround del YadaCommonsMultipartResolver) invece tutto funziona e si arriva al Controller con un MultipartFile pari a null.
 * Il trucco consiste nel mettere il _csrf come parametro nell'url della form action.
 * Esempio: 
-1) { urlBuilder.append("&"); } else { urlBuilder.append("?"); } urlBuilder.append(tokenName).append("=").append(tokenValue); } structureHandler.setAttribute("action", urlBuilder.toString()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy