即使根据文档配置了所有内容,我仍然在尝试在我的网站上做一些操作时遇到了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);
}
}
1条答案
按热度按时间bq3bfh9z1#
我也在用React Native/JSX做一个YouTube克隆。
看起来你在使用Java,但我在尝试实现时也遇到了同样的错误。我使用的是RapidAPI的youtube API。