Моя конфигурация WebSecurityConfiguration с глобальными настройками cors выглядит следующим образом:
Код: Выделить всё
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable).authorizeHttpRequests(authorizeRequests ->
authorizeRequests
.requestMatchers(HttpMethod.POST, "/diagram/**").authenticated()
.requestMatchers(HttpMethod.PUT, "/diagram/**").authenticated()
.anyRequest().permitAll()).addFilterBefore(jwtAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
@Bean
public JwtAuthorizationFilter jwtAuthorizationFilter() {
return new JwtAuthorizationFilter();
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowedHeaders(List.of("*"));
corsConfiguration.setExposedHeaders(List.of("Authorization"));
corsConfiguration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
corsConfiguration.setAllowedHeaders(List.of("Authorization", "X-Refresh-Token", "Origin", "Content-Type", "Accept"));
corsConfiguration.setMaxAge(Duration.ofMinutes(10));
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(source);
}
}
Код: Выделить всё
@Component
public class JwtAuthorizationFilter extends OncePerRequestFilter {
@Autowired
private SupabaseAuthService supabaseAuthService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String tokenFromRequest = parseJwt(request);
//...
filterChain.doFilter(request, response);
}
private String parseJwt(HttpServletRequest request) {
String headerAuth = request.getHeader("Authorization");
if (StringUtils.hasText(headerAuth) && headerAuth.startsWith("Bearer ")) {
return headerAuth.substring(7);
}
return null;
}
}
Код: Выделить всё
const apiCall = async () => {
const response = await axios.post('http://localhost:8081/diagram/hello',{
headers: {
'Authorization': 'Bearer ...',
'Content-Type': 'application/json'
}})
};
Решение
Isse каким-то образом был связан с axios, когда я заменил axios на вызов fetch, это сработало.
Код: Выделить всё
const apiCall = async () => {
const response = await fetch('http://localhost:8081/diagram/hello',{
method: 'POST',
headers: {
'Authorization': 'Bearer ' + ...,
'Content-Type': 'application/json'
}
})
};
https://github.com/hardikSinghBehl/jwt-auth -flow-spring-security
Подробнее здесь: https://stackoverflow.com/questions/787 ... ut-by-cors
Мобильная версия