Disattivare cors filter per richieste dal frontend

di il
6 risposte

Disattivare cors filter per richieste dal frontend

Salve a tutti, ho un backend java che gira su tomcat, sto cercando di fare delle richieste http dal frontend Angular ma mi vengono bloccate dal cors filter.  Non uso springboot al momento.

Ho gia provato a creare una classe CorsFilter:

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.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet Filter implementation class CORSFilter
*/
// Enable it for Servlet 3.x implementations
/* @ WebFilter(asyncSupported = true, urlPatterns = { "/*" }) */
public class CORSFilter implements Filter {
    /**
     * Default constructor.
     */
    public CORSFilter() {
        // TODO Auto-generated constructor stub
    }
    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }
    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("CORSFilter HTTP Request: " + request.getMethod());
        // Authorize (allow) all domains to consume the content
        ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
        ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        // For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake
        if (request.getMethod().equals("OPTIONS")) {
            resp.setStatus(HttpServletResponse.SC_ACCEPTED);
            return;
        }
        // pass the request along the filter chain
        chain.doFilter(request, servletResponse);
    }
    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }
}

E il mio web.xml si compone di queste righe: 

<?xml version="1.0" encoding="UTF-8"?>
<!-- This web.xml file is not required when using Servlet 3.0 container,
see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.riccardo.ws</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
<filter>
<display-name>CORSFilter</display-name>
<filter-name>CORSFilter</filter-name>
<filter-class>com.riccardo.filter.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORSFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
 

Sono ore che provo a farlo funzionare ma niente di fatto.. Grazie a chi sa darmi consiglio :)

6 Risposte

  • Re: Disattivare cors filter per richieste dal frontend

    Ad occhio non vedo errori.

    Vedo che stampi le request che arrivano al filtro… vedi qualcosa nei log? Per essere certi che il filtro venga effettivamente attivato e la richiesta passi di là.

    Eventualmente controlla che non vi sia qualche altra eccezione di altro tipo.

    Di solito a dare il problema è il preflight (method OPTION), ma vedo che l'hai gestito.

  • Re: Disattivare cors filter per richieste dal frontend

    26/09/2023 - SpiritoLibero ha scritto:


    Ad occhio non vedo errori.

    Vedo che stampi le request che arrivano al filtro… vedi qualcosa nei log? Per essere certi che il filtro venga effettivamente attivato e la richiesta passi di là.

    Eventualmente controlla che non vi sia qualche altra eccezione di altro tipo.

    Di solito a dare il problema è il preflight (method OPTION), ma vedo che l'hai gestito.

    Ho notato che appena importo queste due dipendenze si spacca tutto 

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
    <dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>2.5</version>
    </dependency>
  • Re: Disattivare cors filter per richieste dal frontend

    26/09/2023 - Bovy98 ha scritto:


    26/09/2023 - SpiritoLibero ha scritto:


    Ad occhio non vedo errori.

    Vedo che stampi le request che arrivano al filtro… vedi qualcosa nei log? Per essere certi che il filtro venga effettivamente attivato e la richiesta passi di là.

    Eventualmente controlla che non vi sia qualche altra eccezione di altro tipo.

    Di solito a dare il problema è il preflight (method OPTION), ma vedo che l'hai gestito.

    Ho notato che appena importo queste due dipendenze si spacca tutto 

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
    <dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>2.5</version>
    </dependency>

    Inoltre a console mi da questo errore: 

    set 26, 2023 5:47:44 PM org.apache.catalina.core.StandardContext startInternal
    GRAVE: One or more Filters failed to start. Full details will be found in the appropriate container log file
    set 26, 2023 5:47:44 PM org.apache.catalina.core.StandardContext startInternal
    GRAVE: Context [/RestApiMyBatis] startup failed due to previous errors
    set 26, 2023 5:47:44 PM org.apache.catalina.startup.HostConfig deployDirectory
  • Re: Disattivare cors filter per richieste dal frontend

    UPDATE:  sistemato l' errore di prima, ora rimane questo, credo sia un problema di compatibilita` …

    java.lang.NoClassDefFoundError: javax/servlet/Filter

    Io ho aggiunto le dipendenze sul pom e fatto cio` che dovevo fare.. ma ancora non sembra andare

    pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.riccardo</groupId>
    	<artifactId>RestApiMyBatis</artifactId>
    	<packaging>war</packaging>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>DemoREST</name>
    
    	<build>
    		<finalName>RestApiMyBatis</finalName>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.8.1</version>
    				<inherited>true</inherited>
    				<configuration>
    					<source>1.11</source>
    					<target>1.11</target>
    				</configuration>
    			</plugin>
    
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-war-plugin</artifactId>
    				<version>3.3.1</version>
    			</plugin>
    
    			<plugin>
    				<groupId>org.mybatis.generator</groupId>
    				<artifactId>mybatis-generator-maven-plugin</artifactId>
    				<version>1.4.2</version>
    			</plugin>
    		</plugins>
    	</build>
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.glassfish.jersey</groupId>
    				<artifactId>jersey-bom</artifactId>
    				<version>${jersey.version}</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.glassfish.jersey.containers</groupId>
    			<artifactId>jersey-container-servlet-core</artifactId>
    		</dependency>		
    
    		<!--
    		https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<version>2.14.2</version>
    		</dependency>
    
    
    		<dependency>
    			<groupId>org.glassfish.jersey.inject</groupId>
    			<artifactId>jersey-hk2</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.glassfish.jersey.media</groupId>
    			<artifactId>jersey-media-json-binding</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.11</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
    		<dependency>
    			<groupId>org.postgresql</groupId>
    			<artifactId>postgresql</artifactId>
    			<version>42.6.0</version>
    		</dependency>
    
    
    		<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
    		<dependency>
    			<groupId>com.oracle.database.jdbc</groupId>
    			<artifactId>ojdbc8</artifactId>
    			<version>21.9.0.0</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    		<dependency>
    			<groupId>ch.qos.logback</groupId>
    			<artifactId>logback-classic</artifactId>
    			<version>1.4.6</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.5.13</version>
    		</dependency>
    
    
    		<!--
    		https://mvnrepository.com/artifact/org.mybatis.dynamic-sql/mybatis-dynamic-sql -->
    		<dependency>
    			<groupId>org.mybatis.dynamic-sql</groupId>
    			<artifactId>mybatis-dynamic-sql</artifactId>
    			<version>1.5.0</version>
    		</dependency>
    		
    		<!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
    		<dependency>
    		    <groupId>com.thetransactioncompany</groupId>
    		    <artifactId>cors-filter</artifactId>
    		    <version>2.10</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    		<dependency>
    		    <groupId>javax.servlet</groupId>
    		    <artifactId>javax.servlet-api</artifactId>
    		    <version>3.1.0</version>
    		    <scope>provided</scope>
    		</dependency>
    
    
    
    		<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.containers/jersey-container-servlet -->
    		<dependency>
    		    <groupId>org.glassfish.jersey.containers</groupId>
    		    <artifactId>jersey-container-servlet</artifactId>
    		    </dependency>
    
    
    
    
    	</dependencies>
    	<properties>
    		<jersey.version>3.1.1</jersey.version>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    </project>
    
  • Re: Disattivare cors filter per richieste dal frontend

    Che versione di Java EE stai usando?

    Perchè da quando la piattaforma è stata data in mano a Eclipse è diventata Jakarta EE e i package non sono più “javax.servlet” ma “jakarta.servlet”.

  • Re: Disattivare cors filter per richieste dal frontend

    27/09/2023 - SpiritoLibero ha scritto:


    Che versione di Java EE stai usando?

    Perchè da quando la piattaforma è stata data in mano a Eclipse è diventata Jakarta EE e i package non sono più “javax.servlet” ma “jakarta.servlet”.

    Ho sistemato, dovevo aggiungere Maven Dependencies al deployment assembly… sono stupido io che non leggo bene i log… tutto risolto grazie mille!

Devi accedere o registrarti per scrivere nel forum
6 risposte