Olá, queria entender melhor como permitir e bloquear, porque eu não entendi muito bem a parte de retornar null (recuperarToken) no filter e o uso do dofilter. Tentei fazer permitir, porém somente com o endereço ele continua bloqueando e não achei nada que me ajudasse a entender: No arquivo TokenService não fiz alteração.
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.oracleone.forumhub"))
.paths(PathSelectors.any())
.build();
}
}
@Component
public class SecurityFilter extends OncePerRequestFilter {
@Autowired
private TokenService tokenService;
@Autowired
private UsuarioRepository repository;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String requestURI = request.getRequestURI();
// Ignorar validação de token para Swagger
if (requestURI.startsWith("/v3/api-docs") || requestURI.startsWith("/swagger-ui")) {
filterChain.doFilter(request, response);
return;
}
var tokenJWT = recuperarToken(request);
if (tokenJWT != null) {
var subject = tokenService.getSubject(tokenJWT);
var usuarioOptional = repository.findByLogin(subject);
if (usuarioOptional.isPresent()) {
var usuario = usuarioOptional.get();
var authentication = new UsernamePasswordAuthenticationToken(usuario, null, usuario.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
filterChain.doFilter(request, response);
}
private String recuperarToken(HttpServletRequest request) {
var authorizationHeader = request.getHeader("Authorization");
if (authorizationHeader != null) {
return authorizationHeader.replace("Bearer ", "").trim();
}
return null;
}
}