我是webdev的新成员,我正在尝试开发这个非常简单的应用程序,你可以在其中购买足球比赛的门票。这个程序运行得很好,但我只是尝试创建一个购物车,我的想法是每次有人向购物车中添加一个名为paid的属性时,就将其推入数据库,该属性将是0(未付款)或1(付款,结帐后)。这一切进行得很顺利,但当我把一切都设置好后,我看到电话被cors屏蔽了,这很奇怪,因为我已经把cors的一切都设置好了。以下是我认为相关的代码片段:
来自我的api的控制器(除了getticketbyfanid()之外,每个调用都可以工作)
@CrossOrigin(origins = "*", maxAge = 3600)
@Controller
@RequestMapping(path="/api/v1/ticket")
public class TicketController {
@Autowired
private TicketRepository repository;
@GetMapping("/fan/{id}/{paid}")
public @ResponseBody Iterable<Ticket> getTicketByFanId(@PathVariable int id, @PathVariable int paid) {
return repository.findByFanIDAndPaid(id, paid);
}
@PostMapping
public @ResponseBody String addNewTicket (@RequestBody Ticket ticket) {
repository.save(ticket);
return "Saved";
}
@GetMapping
public @ResponseBody Iterable<Ticket> getAllTickets() {
return repository.findAll();
}
这是我为websecurityconfig设置的内容:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(
prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authorizeRequests().antMatchers("/api/auth/**").permitAll()
.antMatchers("/api/test/**").permitAll()
.antMatchers("/api/v1/**").permitAll()
.anyRequest().authenticated();
http.addFilterBefore(authenticationJwtTokenFilter(), UsernamePasswordAuthenticationFilter.class);
}
}
当然,我已经研究了很长一段时间,并尝试了我在几个论坛(包括stackoverflow)看到的大多数东西,但没有一个附加内容似乎能解决这个问题。我几乎可以肯定的是,这个问题来自于这样一个事实,即我从路径中获取变量,因此我也尝试以不同的方式编辑我的configure方法,这就是修复其余方法的cors问题的方法。除此之外,我还尝试添加如下代码行:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:3000/")
.allowedMethods("PUT", "DELETE", "GET")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false).maxAge(3600);
}
};
}
我得到的最大的结果就是把cors错误改成404,如果我试着允许所有的事情,但仍然没有任何修正。。。
关于我的前端,如前所述,我正在使用react,并通过axios进行api调用。这是我的电话:
(TICKET_API_BASE_URL = http://localhost:8080/api/v1/ticket)
getUnpaidTickets(fanID){
return axios.get(TICKET_API_BASE_URL + "/" + fanID + "/0");
}
这是被添加到一个数组中的状态,然后Map到网站,这是我一直在做的,直到现在,它工作得很好。
这是我每次尝试加载页面时出现的错误截图:
Access to XMLHttpRequest at 'http://localhost:8080/api/v1/ticket/2/0' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
xhr.js:177 GET http://localhost:8080/api/v1/ticket/2/0 net::ERR_FAILED
createError.js:16 Uncaught (in promise) Error: Network Error
at createError (createError.js:16)
at XMLHttpRequest.handleError (xhr.js:84)
事先谢谢任何试图帮助我的人!
1条答案
按热度按时间zdwk9cvp1#
当你收到
404
错误代码表明cors工作正常。你拿到钱了吗
404
错误,因为您正在使用axios请求以下url:但是你的
@GetMapping
配置如下:请注意/风扇路径的不同。
将axios url更改为:
或控制器Map: