5
respostas

Método não liberado

Bom dia, fiz o procedimento do vídeo e o meu método ainda apresenta o código 403Forbidden quando tento acessar, desconfio que seja algo que coloquei no projeto na sua criação, pois desde quando adicionei a dependência do security no pom.xml ele apresenta uma "senha" criada na console, aparece isso sempre que starto o projeto: Using generated security password: e5f1b9d0-a1d1-4fb7-8f3a-5ee036a1181c.

Creio que seja isso que esteja impedindo o acesso ao endpoint, segue o código:

package com.compass.finalproject.security;

import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

//    //Autenticação
//    @Override
//    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//    }

    //Autorização
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers(HttpMethod.POST, "/usuario").permitAll();
    }

//    //Recursos estáticos
//    @Override
//    public void configure(WebSecurity web) throws Exception {
//    }

}
5 respostas

Oi Michael,

Como você não configurou a parte de autenticação, o Spring vai gerar essa senha automática e printar no console.

Como você testou o acesso ao endereço /usuarios?

Boa tarde Rodrigo, testei via postman! Ainda continua dando o problema porém agora fica retornando código 400 pois estou tratando o erro, como orientado no curso na classe AutenticacaoController, se eu remover o try cat, volta a retornar o 403Forbidden. Testei agora no metodo post "/auth".

package com.compass.finalproject.controller;

import javax.validation.Valid;

import com.compass.finalproject.DTO.LoginForm;
import com.compass.finalproject.DTO.TokenDTO;
import com.compass.finalproject.security.TokenService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/auth")
public class AutenticacaoController {

    @Autowired
    private AuthenticationManager authManager;

    @Autowired
    private TokenService tokenService;

    @PostMapping
    public ResponseEntity<TokenDTO> autenticar(@RequestBody @Valid LoginForm form) {
        UsernamePasswordAuthenticationToken dadosLogin = form.converter();

        try {
            Authentication authentication = authManager.authenticate(dadosLogin);
            String token = tokenService.gerarToken(authentication);
            return ResponseEntity.ok(new TokenDTO(token, "Bearer"));
        } catch (AuthenticationException e) {
            return ResponseEntity.badRequest().build();
        }
    }
}
package com.compass.finalproject.security;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private AutenticacaoService autenticacaoService;

    @Override
    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }

    //Autenticação
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(autenticacaoService).passwordEncoder(new BCryptPasswordEncoder());
    }

    //Autorização
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers(HttpMethod.POST, "/usuario").permitAll()
        .antMatchers(HttpMethod.POST, "/auth").permitAll()
        .anyRequest().authenticated()
        .and().csrf().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

    //Recursos estáticos
    @Override
    public void configure(WebSecurity web) throws Exception {
    }

}

PS: Não apresenta mais a senha no console.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Precisamos saber qual erro está acontecendo.

Deixa o catch assim:

} catch (AuthenticationException e) {
    e.printStackTrace();
    return ResponseEntity.badRequest().build();
}

E manda aqui a stack trace que vai sair no console.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Deu Bad Credentials.

O usuario/senha que você esta passando no postman não está cadastrado no banco de dados.

Ou os dados não estão chegando no LoginForm