MultipartFilter.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.utils.transport.http;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ReadListener;
- import javax.servlet.ServletException;
- import javax.servlet.ServletInputStream;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
- import org.openspcoop2.utils.Utilities;
- /**
- * MultipartFilter
- *
- * @author Andrea Poli (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class MultipartFilter implements Filter{
- /** Multipart request start */
- public static final String MULTIPART = "multipart/";
- @Override
- public void init(FilterConfig filterConfig) throws ServletException {
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
- HttpServletRequest httpServletRequest = (HttpServletRequest) request;
- BufferedRequestWrapper reqWrapper = null;
- if(isMultipartRequest(httpServletRequest)){
- // log.debug("Ricevuta Richiesta Multipart...");
- reqWrapper = new BufferedRequestWrapper((HttpServletRequest) request);
- // log.debug("Contenuto: [" +new String(reqWrapper.getBuffer())+"]");
- chain.doFilter(reqWrapper, response);
- }else {
- chain.doFilter(request, response);
- }
- }
- private boolean isMultipartRequest(HttpServletRequest request) {
- if (!"post".equals(request.getMethod().toLowerCase())) {
- return false;
- }
- String contentType = request.getContentType();
- if (contentType == null) {
- return false;
- }
- if (contentType.toLowerCase().startsWith(MULTIPART)) {
- return true;
- }
- return false;
- }
- @Override
- public void destroy() {
- }
- private class BufferedRequestWrapper extends HttpServletRequestWrapper {
- private ByteArrayInputStream bais;
- private BufferedServletInputStream bsis;
- private byte[] buffer;
- public BufferedRequestWrapper(HttpServletRequest req) throws IOException {
- super(req);
- try {
- this.buffer = Utilities.getAsByteArray(req.getInputStream());
- }catch(Exception e) {
- throw new IOException(e);
- }
- }
- @Override
- public ServletInputStream getInputStream() {
- try {
- this.bais = new ByteArrayInputStream(this.buffer);
- this.bsis = new BufferedServletInputStream(this.bais);
- } catch (Exception ex) {
- ex.printStackTrace(System.err);
- }
- return this.bsis;
- }
- @SuppressWarnings("unused")
- public byte[] getBuffer() {
- return this.buffer;
- }
- }
- class BufferedServletInputStream extends ServletInputStream {
- private ByteArrayInputStream bais;
- public BufferedServletInputStream(ByteArrayInputStream bais) {
- this.bais = bais;
- }
- @Override
- public int available() {
- return this.bais.available();
- }
- @Override
- public int read() {
- return this.bais.read();
- }
- @Override
- public int read(byte[] buf, int off, int len) {
- return this.bais.read(buf, off, len);
- }
- @Override
- public boolean isFinished() {
- return false;
- }
- @Override
- public boolean isReady() {
- return true;
- }
- @Override
- public void setReadListener(ReadListener arg0) {
-
- }
- }
- }