4
respostas

Forbidden

Não sei o que está acontecendo, eu tinha desfeito uma configuração e fiz denovo e atrapalhei tudo, não sei em que mexi.

Quando eu tentava acessar algum recurso em que eu estava proibido de acessar, aparecia o body da resposta no postman :

{ "timestamp": "2022-09-28T04:27:52.074+00:00", "status": 403, "error": "Forbidden", "message": "Forbidden", "path": "/classrooms" }

Agora não aparece mais, só o status. Com faço para isso voltar?

4 respostas

Lembrando, não estava usando nenhum Handler e mesmo assim a mensagem padrão no corpo foi a informada acima. Agora eu queria saber como voltar com ela padrão dnv pois agora não retorna corpo nenhum , só o 403.

Oi,

Manda o código da sua classe de configs de segurança

@RequiredArgsConstructor // Faz com que quando a classe for instanciada, os atributos vão ser passados no construtor automaticamente.
@EnableWebSecurity // Desabilita as configurações default do Spring Security, permitindo a gente á configurar as nossas próprias.
@Configuration  // Indica que é uma classe de configuração
public class SecurityConfigurationsImpl  { // As classes de Security só são chamadas quando a aplicação sobe!
    // Nas proximas requisições, essa classe não é chamada dnv, pois as conf já estão salvas.

    private final TokenServiceImpl tokenService; // Classe que contém ações de um token como gerar um token...
    private final UserRepository userRepository; // Repositório da entidade Usuário


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

    @Override
    @Bean
    public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {  // AuthManager, Conf de autenticação.
        return authenticationConfiguration.getAuthenticationManager();
    }

    @Override
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { // Configs de Autorização.

        http.authorizeRequests()// Autorização de requests
                .antMatchers("/auth").permitAll() // Estou permitindo TUDO E TODOS acessarem esse recurso no sistema.
                .antMatchers("/userarea/**").authenticated() // Para acessar esse recurso, tem q estar autenticado.
                .antMatchers("/users/register").permitAll() //  Estou permitindo TUDO E TODOS acessarem esse recurso no sistema.
                .antMatchers("/users/**").hasRole("ADMIN") // Para acessas esse curso, a pessoa logada tem que ser ADM
                .anyRequest().denyAll() // Qualquer outro recurso, sem ser os de cima, serão bloqueados ( securança pra manutenção). No caso, não tem outros recurso.
                .and().cors() // Libera a integração de aplicações externas como o front-end á essa API.
                .and().headers().frameOptions().disable() // É para bloquear a página de login ser colocada em um iFrame
                .and().csrf().disable() // Comentário sobre essa conf na linha 93.
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) // DIZ QUE A APLICAÇÃO NÃO TEM ESTADO, OS DADOS SÃO GUARDADOS EM UM TOKEN!
                .and().addFilterBefore(new AuthenticationJWTFilter(tokenService, userRepository), UsernamePasswordAuthenticationFilter.class); // Adiciona um FILTRO, Antes


        return http.build();
    }

    @Override
    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring().antMatchers
                ("/swagger-ui/**", "/v3/api-docs/**", "/h2-console/**");
    }


    @Override
    @Bean
    public CorsConfigurationSource corsConfigurationSource() {           // Método relacionado á CORS, integração com um meio externo.
        CorsConfiguration configuration = new CorsConfiguration().applyPermitDefaultValues();
        configuration.setAllowedMethods(Arrays.asList("POST", "GET", "PUT", "DELETE", "OPTIONS"));
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }


     /*
         csrf - é uma proteção contra hackers que "roubam a sessão", como estamos usando staless, n temos sessão, e deixar essa conf(padrão habilitada)
         não teria sentido, pois é um cenário impossivel, por isso desativamos.
         */


}

Alguém pode me ajudar?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software