反正有没有让这个端点允许来自任何地方的请求?
我尝试过,但是没有一个起作用。
@CrossOrigin(来源=“ ”)
@CrossOrigin(origins =“ http:// ”)
@CrossOrigin(origins = "http://localhost:3001")
@GetMapping(path="/transactions")
public @ResponseBody List<RealEstateTransaction> getTransactions() {
return realEstateTransactionService.findTargets();
}
答案 0 :(得分:1)
在使用跨域时,大多数时候我们倾向于担心问题出在哪里以及出了什么问题。在处理请求之前,需要在服务器端处理许多因素,包括安全性,Web组件,套接字等。在Spring Boot应用程序中实现CORS
的多种方法。
通过像在@CrossOrigin
类中所做的一样实现Main
。如果仅应从特定域访问特定的API,也可以通过在特定的控制器/方法中添加@CrossOrigin
来完成。
@CrossOrigin("*") // to allow from all domains
@CrossOrigin("http://localhost:3001") // to allow from specific domain
@CrossOrigin(origins = "http://localhost:3001")
如果Spring Application是可以访问资源的MVC。只需覆盖WebMvcConfigurer's
addCorsMappings
函数即可添加CORS映射。
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowedHeaders("*");
}
}
SecurityConfig
中实现CORS。注册CORS过滤器可以通过多种方式完成。一种是将UrlBasedCorsConfigurationSource
添加到http.cors()函数。另一种方法是通过扩展CustomCorsFilter
来创建CorsFilter
。public class CustomCorsFilter extends CorsFilter {
public CustomCorsFilter() {
super(configurationSource());
}
public static UrlBasedCorsConfigurationSource configurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowCredentials(true);
configuration.addAllowedOrigin("*");
configuration.addAllowedHeader("*");
configuration.setMaxAge(3600L);
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**", configuration);
return corsConfigurationSource;
}
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
String[] paths = {"/auth/**", "/env"};
//http.cors().configurationSource(CustomCorsFilter.configurationSource()); // Option 1
http
.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(this.authenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers(paths)
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/**")
.authenticated()
.and()
.addFilterBefore(new CustomCorsFilter(), UsernamePasswordAuthenticationFilter.class); //option 2
}