Używam Ionic i Spring Boot 1.3. Dopiero zaktualizowałem do wersji 1.3, że otrzymuję ten problem ...Na żądanym zasobie nie ma nagłówka "Access-Control-Allow-Origin". Ionic, AngularJS, Spring Boot 1.3
Najwyraźniej po aktualizacji do Spring Boot 1.3. CorsFilter jest całkowicie ignorowany. Cała ta deprecjacja doprowadza mnie do szału. Więc spojrzałem na NOWĄ drogę i to jest to, co otrzymałem.
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");
}
}
Powyższy fragment kodu jest sprawdzony podczas uruchamiania aplikacji. W przeciwieństwie do CorsFilter, który jest wykonywany za każdym razem, gdy istnieje żądanie. Ale przełączając się na Spring Boot 1.3, nie mogę już dostać tego w filtrze łańcuchowym.
Ponownie, kod jest ładowany, ustawiam punkt przerwania i dodamCorsMapping jest wywoływany za każdym razem, więc ustawienia są wprowadzane. Tak .... Dlaczego jestem wciąż otrzymuję ten błąd
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 Poniżej jest mój stary CorsFilter. Nie działa już od czasu aktualizacji do wersji 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() {
}
}
Dzięki za odpowiedź. Przed aktualizacją do 1.3 Spring Boot. Miałem coś takiego i to działało idealnie. Od czasu aktualizacji do wersji Spring Boot 1.3 całkowicie ignoruje ją teraz. dlatego dodałem nowszą konfigurację. Dodałem mój CorsFilter powyżej. Jest podobny do twojego, z wyjątkiem tego, że dostaję pochodzenie IP i ustawię go na kontrolę dostępu pozwalającą na początek. W każdym przypadku plik jest całkowicie ignorowany, co oznacza, że żadne ustawienia nie są stosowane. Chciałbym również dodać, że używam warstwy WebSocket, która nie pozwala na wartość astrick. – numerical25
nawet dla mnie działa ten sam filtr –