java SpringBoot + Auth 0- CORS问题

yquaqz18  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(132)

即使根据文档配置了所有内容,我仍然在尝试在我的网站上做一些操作时遇到了SOBE CORS问题。
我正在使用教程制作一个YouTube克隆。到目前为止一切顺利,我设法覆盖和适应了其中不起作用的部分\被弃用(这包括使用filterChain而不是www.example.com上的WebSecurityConfigureAdpterSecurityConfig.java)。
然而,当我试图请求一个端点(用于上传视频)时,当我点击上传按钮时,我收到了一个401 XHR错误-与跨源问题有关。
在我的www.example.com上SecurityConfig.java一切看起来都设置正确。在WebMvc配置上也是如此,允许任何地方的任何东西。
我尝试在www.example.com中实现一个函数SecurityConfig.java作为Bean,以单独配置cors(没有WebMvcConfig类),但它也不起作用。
这个项目在前端运行。我添加了一个小部分来识别用户是否登录(登录后只显示用户详细信息),用户是否经过身份验证(登录后我可以显示用户详细信息)。
任何输入将不胜感激。此外,如果我错过了什么,以描述我的问题在这里,我会很高兴编辑后,并提供信息。
先谢谢你了!
SecurityConfig.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 package com.巴勃罗.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);
    }

}
bq3bfh9z

bq3bfh9z1#

我也在用React Native/JSX做一个YouTube克隆。
看起来你在使用Java,但我在尝试实现时也遇到了同样的错误。我使用的是RapidAPI的youtube API。

  • 验证服务器权限
  • 检查服务器日志
  • 验证软件版本
  • 通过Postman或在研究中心测试终点
  • 重新启动/重新安装软件包

相关问题