2
respostas

Spring boot Cors

Oi estou com um problema com o cors no spring boot, quero desativar o cors mas as configurações que fiz não funcionou

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {
         registry
         .addMapping("/*")
         .allowedOrigins("*")
         .allowedHeaders("*")
         .exposedHeaders("*")
         .allowedMethods("*")
         ;
    }
}

na class do spring security:

@Bean
    protected SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        
        
        return http.cors(cors  -> cors.disable())
                   .csrf(csrf -> csrf.disable())
                   .sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                   .authorizeHttpRequests(req -> {
                            req.requestMatchers(HttpMethod.POST, "/autenticacao/login").permitAll();
                            req.requestMatchers(HttpMethod.GET, "/swagger-ui/**").permitAll();
                            req.requestMatchers(HttpMethod.GET, "/actuator/**").permitAll();
                            req.requestMatchers(HttpMethod.GET, "/swagger-resources/**").permitAll();
                            req.requestMatchers(HttpMethod.GET, "/v3/api-docs/**").permitAll();
                            req.requestMatchers(HttpMethod.GET, "/webjars/**").permitAll();
                            req.anyRequest().authenticated();
                   })
                   .addFilterBefore(this.securityFilter, UsernamePasswordAuthenticationFilter.class)
                   .build();
    }

e na class controller:

@CrossOrigin
@Tag(name = "Autenticação", description = "Método para se autenticar na API")
@RestController
@RequestMapping("/autenticacao")
public class AutenticacaoController {
    
    private static Logger log = Logger.getLogger(AutenticacaoController.class);
    
    @Autowired
    private AuthenticationManager manager;
    
    @Autowired
    private TokenService tokenService;
    
    @PostMapping("login")
    public ResponseEntity<DadosTokenJWT> login(@RequestBody @Valid DadosLogin login) {
        
        log.info("Realizando o login: "+login.username());
        
        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(login.username(), login.password());
        Authentication authenticate = manager.authenticate(authenticationToken);
        
        String token = this.tokenService.gerarToken((Usuario) authenticate.getPrincipal());
        
        log.info("HTTP ok");
        return ResponseEntity.ok(new DadosTokenJWT(token, "Bearer"));
    }

}

poderiam me ajudar por favor ?

2 respostas

Olá Ronielisson!

Uma sugestão é adicionar a anotação @CrossOrigin na classe do controlador, como você já fez. Isso permite que as solicitações sejam feitas de qualquer origem. No entanto, você também pode especificar origens específicas usando o atributo origins da anotação, por exemplo: @CrossOrigin(origins = "http://exemplo.com").

Outra coisa a verificar é se você está importando as classes corretas para as configurações do CORS. Certifique-se de importar org.springframework.web.bind.annotation.CrossOrigin para a classe do controlador e org.springframework.web.servlet.config.annotation.CorsRegistry para a classe de configuração do CORS.

Se mesmo assim o CORS não estiver sendo desativado corretamente, pode ser necessário verificar se há algum filtro de segurança adicional interferindo nas configurações do CORS. Certifique-se de que não há outros filtros de segurança que estejam habilitando o CORS novamente.

Espero que essas sugestões possam te ajudar a resolver o problema com o CORS no Spring Boot. Se tiver mais alguma dúvida, é só me dizer. Espero ter ajudado e bons estudos!

verifiquei os imports e o único filtro que tenho é o do security

@Component
public class SecurityFilter extends OncePerRequestFilter {
    
    
    @Autowired 
    private TokenService tokenService;
      
    @Autowired 
    private UsuarioService usuarioService;
     
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String tokenJWT = recuperarTokenJWT(request);
        
          if(null != tokenJWT) {
          
            String subject = this.tokenService.getSubject(tokenJWT);
            Usuario usuario = this.usuarioService.getUsuarioByUsername(subject);
                
            SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(usuario, null, usuario.getAuthorities()));
          
          }
         
        filterChain.doFilter(request, response);
    }
    
    
    private String recuperarTokenJWT(HttpServletRequest request) {
        String authorization = request.getHeader("Authorization");
        if(null != authorization) {
            return authorization.replace("Bearer ", "");
        }
        return null;
    }

}