Estoy desarrollando una aplicación usando Spring Boot en backend y React en frontend. Tengo algunos problemas con CORS y la autorización: en particular, cuando hago una solicitud desde la interfaz, coloco el encabezado de Authorization que contiene el token JWT para la autenticación. Aquí un ejemplo del código:
async function getUserInfo (username) { const url = baseURL + "/users/" + username const jwt = sessionStorage.getItem('token') let [err, response] = await to(fetch(url), { method: 'GET', headers: { 'Authorization': 'Bearer ' + jwt, 'Content-Type': 'application/json' } }) ... } Cuando la solicitud llega al backend, falta este encabezado y la autenticación falla. Para configurar CORS en Spring Boot, uso la anotación @CrossOrigin :
@CrossOrigin(origins = ["*"], allowedHeaders = ["*"], exposedHeaders = ["*"]) @RestController class UserController ( val userDetailsService: UserDetailsServiceImpl, val authenticationManager: AuthenticationManager, val jwtUtils: JwtUtils ) { ... }La configuración de Seguridad es la siguiente:
override fun configure(http: HttpSecurity) { //csrf is enable by default http.cors().and().csrf().disable() .exceptionHandling().authenticationEntryPoint(authEntryPoint) .and() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers("/auth/**") .permitAll() .and() .authorizeRequests() .antMatchers("/users/{username}/**") .hasAuthority("ADMIN") .and() .authorizeRequests() .antMatchers("/**") .hasAuthority("CUSTOMER") .and() .logout() .permitAll() http.addFilterBefore(JwtAuthenticationTokenFilter(jwtUtils), UsernamePasswordAuthenticationFilter::class.java) } Las solicitudes se realizan mediante un usuario ADMIN en el punto final /users/{username} , como se muestra en el código de la interfaz.
¿Como puedó resolver esté problema?