Как передать 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 день на этом сижу :(((