Sto usando Ionic e Spring Boot 1.3. Non è stato fino a quando ho aggiornato a 1.3 che sto ricevendo questo problema ...Nessuna intestazione 'Access-Control-Allow-Origin' è presente sulla risorsa richiesta. Ionic, AngularJS, Spring Boot 1.3
Apparentemente dopo l'aggiornamento a Spring Boot 1.3. CorsFilter viene completamente ignorato. Tutta questa deprecazione mi sta facendo impazzire. Così ho cercato il modo NUOVO e questo è quello che ho ottenuto.
package app.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://192.168.1.66:8101")
.allowCredentials(false)
.maxAge(3600)
.allowedHeaders("Accept", "Content-Type", "Origin", "Authorization", "X-Auth-Token")
.exposedHeaders("X-Auth-Token", "Authorization")
.allowedMethods("POST", "GET", "DELETE", "PUT", "OPTIONS");
}
}
Il codice di cui sopra viene inserito nel boot dell'applicazione. A differenza di CorsFilter che viene eseguito ogni volta che viene richiesta. Ma passando a Spring Boot 1.3, non riesco più a ottenere questo nel filtro della catena.
Ancora una volta, il codice viene caricato, ho impostato un punto di interruzione e addCorsMapping viene chiamato ogni volta in modo che le impostazioni vengano effettuate. Quindi .... Perché sono ancora ricevendo questo errore
XMLHttpRequest cannot load http://192.168.1.66:8080/login?username=billyjoe&password=happy. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.1.66:8101' is therefore not allowed access.
EDIT Di seguito è riportato il mio vecchio CorsFilter. Non funziona più da quando ho aggiornato a Spring Boot 1.3
package app.config;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class CorsFilter implements Filter {
private final Logger log = LoggerFactory.getLogger(CorsFilter.class);
public CorsFilter() {
log.info("SimpleCORSFilter init");
}
@Override
public void doFilter(ServletRequest req,
ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String clientOrigin = request.getHeader("origin");
response.addHeader("Access-Control-Allow-Origin", clientOrigin);
response.setHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, PUT");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Accept, Content-Type, Origin, Authorization, X-Auth-Token");
response.addHeader("Access-Control-Expose-Headers", "X-Auth-Token");
if (request.getMethod().equals("OPTIONS")) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
Grazie per la risposta. Prima di aggiornare a 1.3 Spring Boot. Ho avuto qualcosa di simile e ha funzionato perfettamente. Da quando ho aggiornato a Spring Boot 1.3, lo ignora completamente ora. questo è il motivo per cui ho aggiunto la configurazione più recente. Ho aggiunto il mio CorsFilter sopra. È simile al tuo, tranne che ottengo l'origine dell'IP e l'ho impostato su Access Control Allow Origin. In ogni caso, il file viene completamente ignorato, il che significa che non vengono mai applicate impostazioni. Vorrei anche aggiungere che sto usando il livello WebSocket che non consente il valore astrick. – numerical25
anche per me funziona lo stesso filtro –