CORS Filter in Java per applicazioni web

Posted by RedBlue on April 19, 2018 · 1 min read

Forse in molti avranno sentito parlare di Cross Origin Resource Sharing (CORS). Un caso estremamente comune per le applicazioni web è quello del reperimento dei dati mediante un web service di tipo REST, la nostra applicazione quindi andrà a reperire i dati da mostrare attraverso un servizio esposto.

Purtroppo, per limitare l'eventualità di attacchi informatici, i browser moderni applicano la restrizione same-origin; senza entrare in dettagli, un'applicazione web su un dominio A non riuscirà a chiamare il servizio REST esposto su un dominio B.

In Java, esistono vari modi per aggirare tale restrizione, una semplicissima consiste nello scrivere una classe CORSFilter che, come dice il nome stesso, è un filtro CORS personalizzato:

import java.io.IOException;



import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class CORSFilter implements Filter {

	

	@Override

	public void init(FilterConfig filterConfig) throws ServletException {

		// TODO Auto-generated method stub

		

	}



	@Override

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

			throws IOException, ServletException {

		

		HttpServletRequest req = (HttpServletRequest) request;

 

        // Autorizza tutti i domini a consumare il servizio

        ((HttpServletResponse) response).addHeader("Access-Control-Allow-Origin", "*");

        ((HttpServletResponse) response).addHeader("Access-Control-Allow-Methods", "GET, OPTIONS, HEAD, PUT, POST, DELETE");

        ((HttpServletResponse) response).addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

 

        HttpServletResponse resp = (HttpServletResponse) response;

 

        if (req.getMethod().equals("OPTIONS")) {

            resp.setStatus(HttpServletResponse.SC_ACCEPTED);

            return;

        }

 

        chain.doFilter(request, response);

		

	}



	@Override

	public void destroy() {

		// TODO Auto-generated method stub

		

	}



}

Per poi registrarla come filtro nel web.xml:



    CorsFilter

    nomedelpackage.CORSFilter



 



    CorsFilter

    /*

Da ricordare che le righe qui sopra vanno inserite prima del tag .

Tutto qui.. Adesso il filtro CORS funziona a dovere.

Alla prossima..