es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Valor de retorno de Spring a Angular

Quiero un microservicio en Spring que devuelva un valor que pueda identificar si es usuario o administrador a Angular.
Solo he logrado devolver un valor booleano, pero no sé cómo cambiarlo para que funcione con cadenas (puedo usar cualquier tipo de dato), por ejemplo, pensé en devolver un ResponseEntity pero no funcionó.
Agradecido de antemano.
Este es mi código:

APIGatewayApplication.java:

switch(jsonString){
    case "admin":
        //return new ResponseEntity<> ("admin", HttpStatus.OK);
        return true;
    case "user":
        return true;
        //return new ResponseEntity<> ("user", HttpStatus.OK);
    default:
        return false;
        //return new ResponseEntity<> ("None", HttpStatus.OK);
}

login-form.component.ts:
login() {
let url = 'http://localhost:8080/login';
this.http.post<><boolean>>(url, {
username: this.model.username,
password: this.model.password
}).subscribe(isValid => {
if (isValid) {
sessionStorage.setItem(
'token',
btoa(this.model.username + ':' + this.model.password)
);
this.router.navigateByUrl('/actions', { state: { username: this.model.username , role:'user' } });
} else {
alert("Authentication failed.")
}
});
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para devolver un valor que pueda identificar si es un usuario o un administrador en Spring boot, puedes definir un objeto POJO personalizado (Plain Old Java Object) que tenga dos campos para representar los roles – “isAdmin” y “isUser”. Luego, puedes establecer estos campos en función del rol del usuario y devolver el objeto personalizado en el cuerpo de la respuesta. Aquí te mostramos cómo puedes modificar tu código para lograrlo:

    APIGatewayApplication.java:

    public class RoleResponse {
        private boolean isAdmin;
        private boolean isUser;
    
        public RoleResponse(boolean isAdmin, boolean isUser) {
            this.isAdmin = isAdmin;
            this.isUser = isUser;
        }
    
        public boolean isAdmin() {
            return isAdmin;
        }
    
        public void setAdmin(boolean admin) {
            isAdmin = admin;
        }
    
        public boolean isUser() {
            return isUser;
        }
    
        public void setUser(boolean user) {
            isUser = user;
        }
    }
    
    ...
    
    switch(jsonString){
        case "admin":
            return new RoleResponse(true, false);
        case "user":
            return new RoleResponse(false, true);
        default:
            return new RoleResponse(false, false);
    }
    

    En el código anterior, hemos creado un objeto personalizado RoleResponse con dos campos booleanos isAdmin e isUser. Hemos modificado la instrucción switch para establecer estos campos en función del rol del usuario y luego devolver una instancia de RoleResponse utilizando el constructor.

    login-form.component.ts:

    En tu código Angular, puedes modificar la llamada http.post para esperar una respuesta de tipo Observable<roleresponse> en lugar de Observable<boolean>. Luego puedes modificar la condición para comprobar los campos isAdmin e isUser en la respuesta y establecer el rol correspondiente.

    import { RoleResponse } from './models/role-response';
    
    ...
    
    login() {
      let url = 'http://localhost:8080/login';
      this.http.post<roleresponse>(url, {
        username: this.model.username,
        password: this.model.password
      }).subscribe(role => {
        if (role.isAdmin) {
          this.router.navigateByUrl('/actions', { state: { username: this.model.username , role: 'admin' } });
        } else if (role.isUser) {
          this.router.navigateByUrl('/actions', { state: { username: this.model.username , role: 'user' } });
        } else {
          alert("La autenticación ha fallado.")
        }
      });
    }
    

    En el código anterior, hemos importado la clase RoleResponse desde un archivo (digamos role-response.ts) que define el objeto personalizado. Luego, hemos modificado la llamada http.post para esperar una respuesta de tipo Observable<roleresponse> en lugar de Observable<boolean>. En el método subscribe, hemos modificado la condición para comprobar los campos isAdmin e isUser en la respuesta de role y establecer el rol correspondiente.

Comments are closed.