SpringBoot + Auth0 - CORS 问题

问题描述 投票:0回答:1

即使在根据文档配置了所有内容之后,我在尝试在我的站点上执行一些操作时仍然遇到 CORS 问题。

我正在使用教程制作 YouTube 克隆。到目前为止一切顺利,我设法覆盖并调整了其中不起作用的部分 \ 已被弃用(这包括在 SecurityConfig.java 上使用 filterChain 而不是 WebSecurityConfigureAdpter)。

但是,当我尝试请求端点(用于上传视频)时,当我单击上传按钮时,我收到 401 XHR 错误 - 与跨源问题有关。

在我的 SecurityConfig.java 上,一切看起来都设置正确。在 WebMvc 配置上,也允许来自任何地方的任何东西。

我试图在 SecurityConfig.java 中实现一个函数作为 Bean,以单独配置 cors(没有 WebMvcConfig 类),但它也没有用。我有点迷路了。

这个项目在前端运行角度。我添加了一小部分来识别用户是否已登录(登录后仅显示用户详细信息),并且用户已通过身份验证(登录后我可以显示用户详细信息)。

任何输入将不胜感激。此外,如果我在这里遗漏了任何内容来描述我的问题,我将很乐意编辑帖子并提供信息。

提前致谢!

安全配置.java

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Value("${spring.security.oauth2.resourceserver.jwt.issuer.uri}")
    private String issuer;
    @Value("${auth0.audience}")
    private String audience;
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {


        http.authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .cors(Customizer.withDefaults())
                .oauth2ResourceServer()
                .jwt();

        return http.build();



    }

    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(Collections.singletonList("http://localhost:4200"));
        configuration.setAllowedMethods(Arrays.asList("GET","POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
        configuration.setExposedHeaders(Arrays.asList("Authorization", "content-type"));
        configuration.setAllowedHeaders(Arrays.asList("Authorization", "content-type"));
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }


    @Bean
    public JwtDecoder jwtDecoder(){
        NimbusJwtDecoder jwtDecoder = JwtDecoders.fromOidcIssuerLocation(issuer);

        OAuth2TokenValidator<Jwt> audienceValidator = new AudienceValidator(audience);
        OAuth2TokenValidator<Jwt> withIssuer = JwtValidators.createDefaultWithIssuer(issuer);
        OAuth2TokenValidator<Jwt> withAudience = new DelegatingOAuth2TokenValidator<>(withIssuer);

        jwtDecoder.setJwtValidator(withAudience);

        return jwtDecoder;
    }
}

WebMvcConfig.java 包 com.pablo.portfolio.youtubeclone.config;

@EnableWebMvc
@Configuration

public class WebMvcConfig  implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry corsRegistry){
        corsRegistry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "PUT","POST","DELETE","PATCH","OPTIONS")
                .allowedHeaders("*")
                .maxAge(3600);

    }
}

VideoController.java

package com.pablo.portfolio.youtubeclone.controller;


@RestController
@CrossOrigin
@RequestMapping("/api/videos")
@RequiredArgsConstructor
public class VideoController {

    private final VideoService videoService;


    @CrossOrigin
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public UploadVideoResponse uploadVideo(@RequestParam("file")MultipartFile file){
        return videoService.uploadVideo(file);

    }
    @CrossOrigin
    @PostMapping("/thumbnail")
    @ResponseStatus(HttpStatus.CREATED)
    public String uploadThumbnail
            (@RequestParam("file")MultipartFile file, @RequestParam("videoId") String videoId){
        return videoService.uploadThumbnail(file, videoId);
    }
    @CrossOrigin
    @PutMapping
    @ResponseStatus(HttpStatus.OK)
    public VideoDto editVideoMetaData(@RequestBody VideoDto videoDto){
        return videoService.editVideo(videoDto);
    }

    @CrossOrigin
    @GetMapping("/{videoId}")
    public VideoDto getVideoDetails(@PathVariable String videoId){
        return videoService.getVideoDetails(videoId);
    }

}
java spring spring-security auth0
1个回答
0
投票

我也在用 React Native/JSX 制作一个 youtube 克隆。

看起来你正在使用 Java,但我在尝试实现时也遇到了同样的错误。我使用的是 RapidAPI 的 youtube API。

  • 验证服务器权限
  • 检查服务器日志
  • 验证软件版本
  • 使用 Postman 或在网站上测试端点
  • 重启/重新安装包
© www.soinside.com 2019 - 2024. All rights reserved.