我正在开发一个非常基本的弹簧应用程序,运行有角度的前端。当我尝试发送基本帖子或获取请求时,我在浏览器控制台上收到以下 CORS 错误:
我的弹簧控制器看起来像这样:
package com.unlockestate.ueparent.auth;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
private final UserRepository userRepository;
public UserController(UserRepository employeeRepository) {
this.userRepository = employeeRepository;
}
@CrossOrigin(origins= "http://localhost:4200")
@GetMapping("/users")
public Iterable<User> findAllUsers() {
return this.userRepository.findAll();
}
@CrossOrigin(origins= "http://localhost:4200")
@PostMapping("/createUser")
public User addOneUser(@RequestBody User user) {
if (this.userRepository.findByEmail(user.getEmail()) == null) {
return this.userRepository.save(user);
}
return null;
}
}
在 application.properties 我有:
server.servlet.contextPath=/ueapp
当我直接在浏览器中打开 http://localhost:8080/ueapp/users 时,它按预期工作,但是当我从我的角度前端发送请求时,我收到 cors 错误。我认为 @CrossOrigin 注释可以解决这个问题?
如果有人可以帮助我,我将不胜感激。
我也尝试添加全局跨域配置,但没有帮助...
您可以尝试配置一个 Bean 来为您完成这项工作,如下所示:
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import java.util.Arrays;
@Configuration
public class WebConfig {
private static final Long MAX_AGE = 3600L;
@Bean
public FilterRegistrationBean<CorsFilter> corsFilterFilterRegistrationBean() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*"); //you can add you origin url
config.setAllowedHeaders(Arrays.asList(
HttpHeaders.AUTHORIZATION,
HttpHeaders.CONTENT_TYPE,
HttpHeaders.ACCEPT));
config.setAllowedMethods(Arrays.asList(
HttpMethod.GET.name(),
HttpMethod.POST.name(),
HttpMethod.PUT.name(),
HttpMethod.DELETE.name()));
config.setMaxAge(MAX_AGE);
source.registerCorsConfiguration("/**", config);
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<CorsFilter>(new CorsFilter(source));
// we need to CorsFilter before SpringSecurityFilter
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
这对我有用。如果这有帮助,请告诉我。