не долетают до пользователя, а тупо возвращается 403. Делал фильтр для jwt auth
Фильтр
final String authHeader = request.getHeader("Authorization");
final String jwt;
final String username;
// is token exist in header ?
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
filterChain.doFilter(request, response);
return;
}
// substr jwt
jwt = authHeader.substring(7);
// extract username from jwt
username = jwtService.extractUsername(jwt);
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
var isTokenValid = tokenRepository.findByToken(jwt)
.map(t -> !t.isExpired() && !t.isRevoked())
.orElse(false);
if (jwtService.isTokenValid(jwt, userDetails) && isTokenValid) {
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(
userDetails,
null,
userDetails.getAuthorities());
authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authToken);
}
}
filterChain.doFilter(request, response);
Конфиг
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.cors().and()
.authorizeHttpRequests()
// permit
.requestMatchers("/api/v1/auth/**", "/api/docs/**").permitAll()
// any request must be authenticated
.anyRequest().authenticated().and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.authenticationProvider(authenticationProvider)
// filter
.addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class)
// logout
.logout().logoutUrl("/api/v1/auth/logout").addLogoutHandler(logoutHandler)
// clear context
.logoutSuccessHandler((request, response, tauthentication) -> SecurityContextHolder.clearContext());
return http.build();
}
Но после исправления, всё возвращается ок 200 с респонсом
может кто сталкивался ?
Обсуждают сегодня