Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Spring Boot v4 - Request está chegando sem o token, mesmo enviando o header Authorization

Olá turma,

Estou tendo um problema para receber o token na classe de Filter. Ele sempre chega null na classe quando chamo request.getHeader("Authorization". Eu rodei debugando e fui avaliar a request e dentro do objeto, realmente, não está chegando o header Authorization. Estou esquecendo de algo? Abaixo, detalhes das configs:

Classe de SecurityConfiguration:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain configure(HttpSecurity http) {
        return http.csrf(AbstractHttpConfigurer::disable)
                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .authorizeHttpRequests(req -> {
                    req.requestMatchers("/auth").permitAll();
                    req.anyRequest().authenticated();
                })
                .build();
    }

    @Bean
    public AuthenticationManager authConfigurer(AuthenticationConfiguration authConfig) {
        return authConfig.getAuthenticationManager();
    }

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

}

Classe de Filtro:

@Component
public class AuthFilter extends OncePerRequestFilter {

    @Autowired
    private TokenService tokenService;

    @Autowired
    private UsuarioRepository repository;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String tokenJWT = request.getHeader("Authorization");
        System.out.println("tokenJWT: " + tokenJWT);

        filterChain.doFilter(request, response);

    }
}
2 respostas

Adento - Requisição do Insomnia:

* Preparing request to http://localhost:8080/clientes?size=10&page=1&sort=nomeCompleto,asc
* Current time is 2026-01-12T15:16:46.249Z
* Enable automatic URL encoding
* Using default HTTP version
* Enable timeout of 30000ms
* Enable SSL validation
* Found bundle for host: 0x1e72451e060 [serially]
* Can not multiplex, even if we wanted to
* Re-using existing connection #18 with host localhost
* Connected to localhost (127.0.0.1) port 8080 (#18)

> GET /clientes?size=10&page=1&sort=nomeCompleto,asc HTTP/1.1
> Host: localhost:8080
> User-Agent: insomnia/12.2.0
> Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJTQVQiLCJzdWIiOiJhZHJpYW5vcG1AZ21haWwuY29tIiwiaWQiOjEsImV4cCI6MTc2ODIzODIwNn0.h5NWu9XdPkf7AR_HqQJMs9JYHEC1-XXO0eGQxJiborY
> Accept: */*

* Mark bundle as not supporting multiuse

< HTTP/1.1 403 
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 0
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Content-Length: 0
< Date: Mon, 12 Jan 2026 15:16:46 GMT


* Connection #18 to host localhost left intact
solução!

Olá pessoal,

Acabei encontrando uma solução na internet e gostaria de compartilhar. Para esse problema, foi necessário dizer que a classe de AuthFilter deveria entrar na filterChain depois da BasicAuthenticationFilter. Abaixo, a classe SecurityConfiguration revisada:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

    @Autowired
    private AuthFilter authFilter;

    @Bean
    public SecurityFilterChain configure(HttpSecurity http) {
        return http.csrf(AbstractHttpConfigurer::disable)
                .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .authorizeHttpRequests(req -> {
                    req.requestMatchers("/auth").permitAll();
                    req.anyRequest().authenticated();
                })
                .addFilterAfter(authFilter, BasicAuthenticationFilter.class)
                .build();
    }

    @Bean
    public AuthenticationManager authConfigurer(AuthenticationConfiguration authConfig) {
        return authConfig.getAuthenticationManager();
    }

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

}

Espero que ajude mais alguém :)