cors与react-spring-boot web应用程序的问题

6bc51xsx  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(384)

我是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)

事先谢谢任何试图帮助我的人!

zdwk9cvp

zdwk9cvp1#

当你收到 404 错误代码表明cors工作正常。
你拿到钱了吗 404 错误,因为您正在使用axios请求以下url:

http://localhost:8080/api/v1/ticket/2/0

但是你的 @GetMapping 配置如下:

@GetMapping("/fan/{id}/{paid}")

请注意/风扇路径的不同。
将axios url更改为:

http://localhost:8080/api/v1/ticket/fan/2/0

或控制器Map:

@GetMapping("/{id}/{paid}")

相关问题