注释CrossOrigin在Spring Boot中不起作用

我有一个Spring Boot应用程序,它公开了一些端点。我想从React应用程序向这些端点发出请求,但它一直给我带来CORS问题:

CORS策略已阻止从来源’ http:// localhost:3000 ‘

访问’localhost:9090 / helios-admin / api / dashboard / clients?page = 0&size =

30’处的XMLHttpRequest :跨来源请求仅支持协议方案:http,数据,chrome,chrome扩展名,https。

因此,我尝试@CrossOrigin对所有方法以及Controller类使用批注,但是错误是相同的。

我的应用程序中的get请求如下所示:

constructor() {

this.url = 'localhost:9090/helios-admin/api/dashboard/clients?page=0&size=30';

}

getProjectStatusById(projectId) {

Axios.get(this.url).then(res=>{

console.log(res.data);

})

}

少了什么东西?

在我的Spring Boot应用程序中,我只有此类可配置安全性:

@Configuration

@EnableWebSecurity

@EnableGlobalMethodSecurity(securedEnabled = true, jsr250Enabled = true, prePostEnabled = true)

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired

SysdataUserDetailsService sysdataUserDetailsService;

@Autowired

private JwtAuthEntryPoint jwtAuthEntryPoint;

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth

.userDetailsService(sysdataUserDetailsService)

.passwordEncoder(encoder());

}

@Override

protected void configure(HttpSecurity http) throws Exception {

http.cors().and().csrf().disable().authorizeRequests()

.antMatchers(PathConstants.USER_AUTH +"/**", PathConstants.HELIOS+"/dashboard/**").permitAll()

.antMatchers(HttpMethod.GET, "/"+PathConstants.PROCESS_DEFINITION+"/**").permitAll()

.antMatchers(HttpMethod.POST, "/"+PathConstants.PROCESS_DEFINITION+"/**").permitAll()

.antMatchers(HttpMethod.GET, "/"+PathConstants.PROCESS_INSTANCE+"/**").permitAll()

//.anyRequest().authenticated()

.anyRequest().permitAll()

.and()

.exceptionHandling().authenticationEntryPoint(jwtAuthEntryPoint).and()

.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

// custom jwt filter.

http.addFilterBefore(jwtAuthFilter(), UsernamePasswordAuthenticationFilter.class);

}

}

回答:

您可以通过重写添加它addCorsMappingsWebMvcConfigurerAdapter,所以无论是创建一个类 扩展

WebMvcConfigurerAdapter或定义你这样的配置类一个bean:

    @Bean

public WebMvcConfigurer corsConfigurer () {

return new WebMvcConfigurerAdapter() {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/api/**")

.allowedOrigins("http://domain1.com", "http://domain2.com")

.allowedMethods("GET", "OPTIONS")

.allowedHeaders("header1", "header2", "header3")

.exposedHeaders("header1", "header2")

.allowCredentials(false).maxAge(3600);

}

}

}


从5.0版开始WebMvcConfigurerAdapter不推荐使用,因此您可以通过实现WebMvcConfigurer接口来实现相同的功能(添加了默认方法,感谢Java

8!并且可以直接实现而不需要此适配器)

@Configuration

@EnableWebMvc

public class MyWebMvcConfig implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/api/**")

.allowedOrigins("http://domain1.com", "http://domain2.com")

.allowedMethods("GET", "OPTIONS")

.allowedHeaders("header1", "header2", "header3")

.exposedHeaders("header1", "header2")

.allowCredentials(false).maxAge(3600);

}

}

以上是 注释CrossOrigin在Spring Boot中不起作用 的全部内容, 来源链接: utcz.com/qa/435067.html

回到顶部