Article image
Josué Oliveira
Josué Oliveira22/06/2023 15:00
Compartilhe

Requisição para cadastro de novo usuário do GitHub não funciona. Prof. Gleyson Sampaio

  • #Spring Framework
  • #Java
Realizando o curso "Adicionando Segurança a uma API REST com Spring Security"
https://web.dio.me/course/adicionando-seguranca-a-uma-api-rest-com-spring-security
percebi que há uma falha em seu arquivo github, projeto "dio-spring-security-jwt", url:
https://github.com/digitalinnovationone/dio-springboot/tree/main/dio-spring-security-jwt
do professor Gleysson Sampaio:
Ao tentar acessar a rota http://localhost:8080/users com a entrada {"name":"GLEYSON SAMPAIO""username":"glysns","password":"jwt2023""roles": ["USERS","MANAGERS"]} por exemplo, o mesmo retorna o status 403: forbidden e o erro de console: io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: 0, quando na verdade o mesmo está autorizado no método configure da classe anotada como @Configure, método:
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("Configure");
http.headers().frameOptions().disable();
http.cors().and().csrf().disable()
.addFilterAfter(new JWTFilter(), UsernamePasswordAuthenticationFilter.class)
.authorizeRequests()
.antMatchers(SWAGGER_WHITELIST).permitAll()
.antMatchers("/h2-console/**").permitAll()
.antMatchers(HttpMethod.POST,"/login").permitAll()
.antMatchers(HttpMethod.POST, "/users").permitAll() // Aqui a permissão
.antMatchers(HttpMethod.GET,"/users").hasAnyRole("USERS","MANAGERS")
.antMatchers("/managers").hasAnyRole("MANAGERS")
.anyRequest().authenticated()
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
Creio que por se tratar no controller da classe que fará o cadastramento, não deveria ser bloqueado pelo Eclipse o acesso à mesma.
Não consigo cadastrar um usuário para acessar o Token.
Compartilhe
Comentários (3)
Carlos Alecrim
Carlos Alecrim - 22/06/2023 19:42

Pesquisando, esta tudo correto mesmo, mas em algum lugar o código esta inconsistente, e não é neste trecho .


pedi um exemplo do simples do gpt.


import javax.annotation.security.PermitAll;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {
  
  // Outros métodos e endpoints do controlador
  
  @PostMapping("/public")
  @PermitAll
  public String publicEndpoint() {
      // Lógica do endpoint público
      return "Acesso público permitido";
  }
  
  // Outros métodos e endpoints do controlador
}




use  esse import:
 import javax.annotation.security.PermitAll;

use essa notação no metodo do controller: 
@PermitAll

Talvez ajude.

Josué Oliveira
Josué Oliveira - 22/06/2023 18:47

/users deve permitir acesso sem autentificação, pois ele é o cadastro de usuários: Um exemplo de JSON para ele é: {"name":"GLEYSON SAMPAIO""username":"glysns","password":"jwt2023""roles": ["USERS","MANAGERS"]}


Carlos Alecrim
Carlos Alecrim - 22/06/2023 16:59

Se username e a senha esta definido no codigo para o acesso, então você tem que enviar para o /login as credenciais, se ocorrer o match então ele vai no filter e providencia a você um token, então na proxima requisição para o /users você envia o token, para ter acesso. creio que é assim, alguém me corrige se eu estiver errado.