Java 由于CORS,无法向springboot应用程序发出请求

Java 由于CORS,无法向springboot应用程序发出请求,java,spring-boot,cors,Java,Spring Boot,Cors,我试图向heroku上托管的springboot应用程序发出POST请求 const email = 'x@x.com'; const password = 'x'; const data = JSON.stringify({ email, password }); fetch( 'https://culinareat-test.herokuapp.com/api/user/users/_login', { method: 'POST',

我试图向heroku上托管的springboot应用程序发出POST请求

const email = 'x@x.com';
const password = 'x';

const data = JSON.stringify({
    email,
    password
});

fetch(
    'https://culinareat-test.herokuapp.com/api/user/users/_login', 
    {
        method: 'POST',
        headers : {
            'Accept' : 'application/json',
            'Content-Type' : 'application/json'
        },
        body : data,
    }
).then(res => {
    console.log(res);
})
我的回答是:

这是我的springboot应用程序上的控制器:

@RestController
@AllArgsConstructor
public class UserController {

    private final UserService userService;

    @RequestMapping(method = RequestMethod.POST, value = "/user/users/_login")
    public LoginResponse logUserIn(@RequestBody LoginRequest loginRequest, HttpServletResponse response, HttpServletRequest request){
        return userService.logUserIn(loginRequest, response, request);
    }

    //another endpoints
}
我试图从我刚刚在stackoverflow上读到的另一篇文章中做到这一点:

@Configuration
public class AppConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedMethods("*");
    }
}
但是,它什么也不做,我仍然不能做这个请求。
有什么建议我该怎么做?服务器端有什么需要添加的吗?提前谢谢

您需要在控制器中添加注释@CrossOrigin

@RestController
@CrossOrigin(origins = "*", maxAge = 3600)
@AllArgsConstructor
public class UserController {

    private final UserService userService;

    @RequestMapping(method = RequestMethod.POST, value = "/user/users/_login")
    public LoginResponse logUserIn(@RequestBody LoginRequest loginRequest, HttpServletResponse response, HttpServletRequest request){
        return userService.logUserIn(loginRequest, response, request);
    }

    //another endpoints
}

请记住,跨源问题是由浏览器引起的。默认情况下,如果您在origin
http://localhost
,您不能在后端为
localhost
指定CORS

Chrome等浏览器不允许在源
http://localhost
以跨来源方式共享资源。见答案

解决办法很简单。将域解析为
hosts
文件中的
127.0.0.1
,例如
example.com
。然后请求
example.com:8080
example.com
加载前端应用程序,并从
example.com
来源发布请求


此外,您还可以通过导航到
Network
选项卡并复制、粘贴以下两个标题来调试CORS

access-control-allow-credentials: true
access-control-allow-origin: http://example.com/

我试过了,但仍然收到了与上面相同的响应。你可以看到这篇[文章](),我认为你需要实现WebSecurityConfigureAdapter类。你能更具体地描述我应该实现的代码吗?我已经编写了http.cors()和().csrf().disable()在添加@CrossOrigin annotation之后,我可以看到响应吗上面的响应没有任何更改