Как передать JWT token из localStorage в header при запросе к защищенному эндпоинту

Помогите пожалуйста с проблемой. У меня есть закрытый эндпоинт /menu, для того что бы фильтр пропустил туда, нужно в гет запросе передать acsessToken который полсе ааутетификации хранится в localStorage. Пытаюсь сделать это с помощью js скрипта, но он просто не выполняется (я предпологая что из за того что этот эедпоитны закрытый, то страничка не загружается и соответственно и js скрипт).

    fetch('/menu', {
        method: 'GET',
        credentials: 'include',
        headers: {
            'Authorization': `Bearer ${accessToken}`
        }
    })
        .then(response => {
            if (response.ok) {
                return response.json();  // Обрабатываем JSON-ответ
            } else {
                throw new Error('Ошибка: ' + response.statusText);
            }
        })
        .then(data => {
            console.log('Ответ от сервера:', data);
            // Обновите содержимое страницы на основе ответа
        })
        .catch(error => {
            console.error('Ошибка:', error);
            alert('Произошла ошибка при запросе.');
        });

это код скрипта.

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Autowired
    private AuthFilter authFilter;
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
                .addFilterBefore(authFilter, UsernamePasswordAuthenticationFilter.class)
                .csrf(AbstractHttpConfigurer::disable)
                .authorizeHttpRequests(request -> request
                        .requestMatchers("/","/auth", "/registration", "/resources/**","/images/**","/scripts/**").permitAll()
                        .requestMatchers("/token").permitAll()
                        .anyRequest().authenticated()
                )
                .sessionManagement(session -> session
                        .sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .formLogin(AbstractHttpConfigurer::disable)
                .httpBasic(AbstractHttpConfigurer::disable)
                .build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

это код секьюрити конфига

@Component
@RequiredArgsConstructor
public class AuthFilter extends GenericFilterBean {

    private static final String AUTHORIZATION = "Authorization" + "";
    private final JwtProvider jwtProvider;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("JWT AUTHENTICATED.................");
        final String token = getTokenFromRequest((HttpServletRequest)servletRequest);

        System.out.println("token: " + token);
        if(token != null && jwtProvider.validateAccessToken(token)) {
            final Claims claims = jwtProvider.getClaims(token);
            final JwtAuthentication jwtInfoToken = JwtUtil.createJwtAuthentication(claims);
            jwtInfoToken.setAuthenticated(true);
            SecurityContextHolder.getContext().setAuthentication(jwtInfoToken);
        }
        chain.doFilter(servletRequest, servletResponse);
    }

    private String getTokenFromRequest(HttpServletRequest request) {
        final String bearer = request.getHeader(AUTHORIZATION);
        if(StringUtils.hasText(bearer) && bearer.startsWith("Bearer ")) {
            return bearer.substring(7);
        }
        return null;
    }
}

это код фильтра.
Когда выполняю гет запрос через postman и вбиваю туда токен, все срабатывает как надо. У меня проблема именно в том что не срабатывает js код и соответственно заголовок пустой, а там должен лежать токен. Умоляю спасите, 3 день на этом сижу :(((


Ответы (0 шт):