首页 > 解决方案 > 使用跨域时连接被拒绝

问题描述

在此处输入图像描述我正在使用 Angular 和 spring-boot。当我想在本地主机之外调用 api 时,我给了我一个连接被拒绝的错误。

角服务:

export class ProfileService {

  private baseUrl = 'http://localhost:8090/users';

  constructor(private http: HttpClient) {
  }

  getProfile(id: number): Observable<Object> {
    return this.http.get(`${this.baseUrl}` + '/load/' + `${id}`);
  }

弹簧启动应用程序:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    @Bean
    public CorsFilter corsFilter() {
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        final CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.setAllowedOrigins(Collections.singletonList("*"));
        config.setAllowedHeaders(Arrays.asList("Origin", "Content-Type", "Accept"));
        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH"));
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
 }

从 angular 获取请求的用户控制器:

@RestController
@RequestMapping("/users")
public class UsersController {
    @Autowired
    private IUsersService iUsersService;

    @GetMapping("/list/grid")
    public Iterable<UsersViewModel> getAllEmployees() {
        return Dozer.mapList(iUsersService.getAll(), UsersViewModel.class);
    }

    @GetMapping("/load/{id}")
    public UsersViewModel getUserById(@PathVariable(value = "id") Long userId){
        return Dozer.mapClass(iUsersService.findById(userId).get(),UsersViewModel.class);
    }
}

标签: javaspringapachespring-boot

解决方案


请将此更改为config.setAllowedHeaders(Arrays.asList("Origin", "Content-Type", "Accept"));

config.setAllowedHeaders(Arrays.asList("*"));


推荐阅读