【问题标题】:Unable to resolve CORS errors无法解决 CORS 错误
【发布时间】:2023-01-06 22:18:10
【问题描述】:

假设

我们正在使用以下库开发 Web 应用程序。
当请求从前端发送到后端时,会出现 CORS 错误。

  • 前端:Vue.js(版本:3)
  • 后端:Spring Boot(版本:2.7.6)
  • 身份验证:Spring Security

我们想要达到的目标

我们希望解决以下从前端向后端发送请求时出现的 CORS 错误。

Access to XMLHttpRequest at 'http://localhost:8085/users/profile/1' from origin 'http://localhost:8888' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

源代码

在 Vue.js (Edit.vue) 中向 Spring 发送请求

    onClickDelete() {
      const path = 'users/profile/'
      axios.delete(
          process.env.VUE_APP_ROOT_API + path + this.$store.state.user_id,{
            headers: {
              "Authorization": "Bearer " + this.$store.state.jwt_token,
            },
          })
          .then(response => {
          })
          .catch(error => {
            console.log(error)
          })
    },

Spring中的接收流程(UsersController.java)

@RestController
@RequestMapping("/users/profile")
public class UsersController {
    @DeleteMapping("/{user_id}")
    @ResponseStatus(code = HttpStatus.NO_CONTENT, value = HttpStatus.NO_CONTENT)
    public void profiledelete(@PathVariable("user_id") Long id) throws Exception {
    }
}

SpringSecurity配置文件(WebSecurityConfig.java)

@Profile("production")
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private UserRepository userRepository;
    private final JsonRequestAuthenticationProvider jsonRequestAuthenticationProvider;
    @Value("${security.secret-key:secret}")
    private String secretKey = "secret";

    public WebSecurityConfig(JsonRequestAuthenticationProvider jsonRequestAuthenticationProvider// ,
    ) {
        this.jsonRequestAuthenticationProvider = jsonRequestAuthenticationProvider;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        JsonRequestAuthenticationFilter jsonAuthFilter =
                new JsonRequestAuthenticationFilter(userRepository);
        jsonAuthFilter.setAuthenticationManager(authenticationManagerBean());
        http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues());
        http.addFilter(jsonAuthFilter);
        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .exceptionHandling().accessDeniedHandler(accessDeniedHandler())
                .and()
                .csrf().
                    disable()
                .addFilterBefore(tokenFilter(), UsernamePasswordAuthenticationFilter.class)
                .sessionManagement()
                        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        ;
    }

我们尝试了什么

@CrossOrigin 到Spring中接收进程的进程(UsersController.java)

我们做了什么

Spring接收流程(UsersController.java)

@RestController
@RequestMapping("/users/profile")
@CrossOrigin
public class UsersController {
    @DeleteMapping("/{user_id}")
    @ResponseStatus(code = HttpStatus.NO_CONTENT, value = HttpStatus.NO_CONTENT)
    public void profiledelete(@PathVariable("user_id") Long id) throws Exception {
    }
}
结果

仍然显示 CORS 错误。

附加信息

  • 在安装 SpringSecurity 之前,我认为在 Spring 端授予 @CrossOrigin 解决了 CORS 错误。
  • 当在其他请求中使用 GET 方法时,在 Spring 端成功且没有任何 CORS 错误。

【问题讨论】:

    标签: spring-boot spring-security cors


    【解决方案1】:

    你试过 http.authorizeRequests().cors().disable().XXXXX 了吗?它为我解决了cors问题

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2020-12-01
      • 2023-03-12
      • 2021-06-29
      • 2018-01-05
      • 2018-06-05
      • 2015-04-08
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多