我为所有源和头启用了cors,但当我从angular应用程序调用get
方法到spring Boot时,仍然会出现cors错误。
控制台的Cors错误:
Access to XMLHttpRequest at 'http://localhost:8080/api/users/test@ronny.nl' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我的控制器
(我调用getbyemail):
@CrossOrigin(origins = "*", allowedHeaders = "*")
@RestController
@RequestMapping(value = "/api/users", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
private final UserService userService;
@Autowired
public UserController(final UserService userService) {
this.userService = userService;
}
@GetMapping
public List<UserDTO> getAllUsers() {
return userService.findAll();
}
@GetMapping("/{id}")
public UserDTO getUser(@PathVariable final Long id) {
return userService.get(id);
}
@CrossOrigin(origins = "*", allowedHeaders = "*")
@GetMapping("/{email}")
public UserDTO getUserByMail(@PathVariable String email) {
return userService.getByEmail(email);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Long createUser(@RequestBody @Valid final UserDTO userDTO) {
return userService.create(userDTO);
}
@PutMapping("/{id}")
public void updateUser(@PathVariable final Long id, @RequestBody @Valid final UserDTO userDTO) {
userService.update(id, userDTO);
}
@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteUser(@PathVariable final Long id) {
userService.delete(id);
}
}
我从我的angular应用程序中调用get:
onSubmit(): void {
this.submitted = true;
this.wrongInput = false;
this.loginService.getLogin<User>(this.loginForm.value.email).subscribe((response) => {
this.tempUser = response;
console.log(this.tempUser);
if (this.loginForm.value.email === this.tempUser.email && this.loginForm.value.password === this.tempUser.password) {
this.localStorageService.save(this.tempUser);
this.router.navigate(['/home']);
console.log(true);
}
else {
this.wrongInput = true;
}
});
}
我还尝试添加devcorsconfiguration
:
package com.team13.triviaquiz.triviaquizserver.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@Profile("development")
public class DevCorsConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**").allowedMethods("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS");
}
}
并在我的application.properties
中添加了配置文件:
application.properties
spring.profiles.active=development
#enabling h2 console
spring.h2.console.enabled=true
#fixed URL for H2 (necessary from Spring 2.3.0)
spring.datasource.url=jdbc:h2:mem:triviaquizserver
#turn statistics on
spring.jpa.properties.hibernate.generate_statistics = true
logging.level.org.hibernate.stat=debug
#show all queries
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type=trace
但还是没有运气...
这可能是由于Spring库的更改,从而影响了Spring Boot2.4.0。查看此处https://github.com/spring-projects/spring-framework/issues/26111以及其相关票证https://github.com/spring-projects/spring-framework/pull/26108
在此编辑第一个链接的原始消息:
#25016除了只配置AllowedOrigins之外,还引入了配置allowedOriginPatterns的功能。它允许您定义更灵活的模式,而后者实际上是Access-Control-Allow-Origin头中返回的值,因此不允许将“*”与allowCredentials=true结合使用。该更改在WebMvc和WebFlux配置中引入了等价的allowedOriginPatterns方法,但在SockJS配置和AbstractSocketJSService中没有引入。
我会为5.3.2添加这些。然后,您需要切换到AllowedOriginPatters,而不是allowedOrigins,但这为您提供了一个更精确地定义允许的域模式的选项。同时,如果可行的话,您可以通过列出特定的域来解决问题。
我的基本配置是: 我尝试了这些变量的不同组合,但仍然不起作用。有什么想法吗?
问题内容: 我正在尝试从API获取JSON对象,并且该API的开发人员说他们刚刚启用了CORS,但我仍然遇到以下错误。 XMLHttpRequest无法加载http://example.com/data/action/getGame/9788578457657。所请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://dev.our-
我正在编写一个web应用程序,其中客户端将(JSON)表单数据发布到,服务器也应该使用JSON进行响应。服务器端使用java servlet编写,运行在Tomcat上,客户端使用Angular 7编写。不幸的是,即使在通过HTTP头启用CORS之后,我仍然面临CORS错误。我有什么遗漏吗? 这就是我在客户端遇到的错误:在'http://localhost:8080/mysocial/signIn“
我有一个带rest控制器的Spring启动应用程序和一个Angular应用程序作为前端。目前,它们都在本地主机上运行,SpringSecurity在Spring中启用。最初,由于Cors,我无法从Angular向Spring发出getRequest。我将@CrossOrigin添加到我的restContoller中,现在我可以执行从angular到Spring的Get请求。现在我在post请求中也
我使用的是Spring Boot版本2.0.2Release。下面是我的安全配置 加载http://localhost:8080/myurl失败:对预飞行请求的响应未通过访问控制检查:请求的资源上没有“access-control-allow-origin”标头。因此,不允许访问源“http://localhost:4200”。响应的HTTP状态代码为403。
问题内容: 如何在Spring 5 Webflux项目中启用 CORS ? 我找不到任何适当的文档。 问题答案: 这是Webflux配置器的另一种解决方案。 旁注:它的Kotlin代码(从我的项目中复制),但是您可以轻松地将其转换为Java代码。