尽管在控制器中添加了 CrossOrigin 注释,但在 Spring 中仍然收到 CORS 错误

问题描述 投票:0回答:1

我正在开发一个非常基本的弹簧应用程序,运行有角度的前端。当我尝试发送基本帖子或获取请求时,我在浏览器控制台上收到以下 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 注释可以解决这个问题?

如果有人可以帮助我,我将不胜感激。

我也尝试添加全局跨域配置,但没有帮助...

java angular spring cors
1个回答
0
投票

您可以尝试配置一个 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;

    }

这对我有用。如果这有帮助,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.