java - 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,为什么它不能正常工作?
谢谢,
提前...
解决方案
所以 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("/**");
}
}
这适用于所有来源,对开发人员有好处
推荐阅读
- java - Jackson + Jersey 没有正确序列化日期
- docker - 在 docker compose 中为运行状况检查指定 postgres 参数的安全方法
- css - 'disabled' CSS 属性不适用于带有 Styled-Components 的语义 UI 覆盖
- jekyll - 使用 Jekyll 为同一篇博文生成两个布局
- c++ - 由于 c++ 析构函数导致 gdb 跳转
- javascript - 使用 _id 字符串的 GraphQL 查询,对象 ID 存储在 MongoDB 中
- python - 生成器函数产生最大的可迭代值
- python - 从安装有毒物的车轮记录覆盖范围
- process - 发出“SIGUSR1”信号时发送退出代码
- html - 如何编辑svg图像中的文本