首页 > 解决方案 > Springboot java @CrossOrigin 不起作用,因为它应该起作用,当这个注释存在时为什么我必须做额外的配置?

问题描述

@CrossOrigin(origins="http://localhost:3000") 
@RequestMapping(value="", method = RequestMethod.GET)
public ResponseEntity<List<Client>> getAllClients(/*@RequestParam("page") int page, @RequestParam("size") int size*/) {

    List<Client> clientList = services.getClientsList(/*page,size*/);
    if(clientList != null) {
        return new ResponseEntity<>(clientList, HttpStatus.OK);
    }else{
        return  new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    }
}

如果 spring boot 提供了@CrossOrigin,为什么它不能正常工作?

谢谢,

提前...

标签: javaspring-bootspring-securitycors

解决方案


所以 Spring 安全性和 @CrossOrigin 注释不相互交谈。

您还需要为弹簧安全性配置 CORS。

您可以在官方文档中找到:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .anyRequest().fullyAuthenticated().and()
            .httpBasic()
            .and()
            .csrf().disable()
            // by default uses a Bean by the name of corsConfigurationSource
            .cors().and()
            ...
    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Arrays.asList("https://localhost:3000"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}

否则,您可以尝试使用 globla 配置:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

这适用于所有来源,对开发人员有好处


推荐阅读