Ce projet est un service web (API) permettant la création, suppression, modification de comptes utilisateurs. Elle permet aussi une connexion/déconnexion d'un utilisateur.
- HAMMY Mohammed El Habib
- Email: [email protected]
- KABBOUCH Nasreddine
- Email: [email protected]
- ALLOUANE Dounia
- Email: [email protected]
Pour le bon fonctionnement de cette API, les programmes suivants sont nécessaires :
- JRE 8 ou ultérieur
- H2 database 1.4.196
- Tomcat 8.5.14
- IDE (Eclipse)
- Maven 3.5.2
Pour exécuter ce projet, suivez les instructions suivantes :
-
Dans Eclipse faite { [RightClick]>Maven>Update Porject } puis { OK } dans l'onglet qui s'ouvrira. Cela permettra d'importer toutes les dépendences du projet.
-
Puis faite { [RightClick]>Run As>Spring Boot App } pour lancer le service.
Ce projet est un service web. il peut être requetté par d'autres applications via HTTP afin de remplir les fonctionnalités liées à la gestion des comptes utilisateurs. Il offre la possibilité de faire les requêtes suivantes :
1- [GET] "http://~/api/user/" :
Cette route permet de récupérer l'ensemble des objets users présent dans la base de données.
Les users sont renvoyés sous format JSON :
{
"id": 100,
"username": "alice",
"email": "[email protected]",
"firstname": "alice",
"lastname": "alice",
"country": "FRANCE"
}
2- [GET] "http://~/api/user/{id}" :
Cette route permet de récupérer l'objet user correspondant à l'id passé en paramètre.
L'objet est renvoyé sous le même format JSON.
3- [POST] "http://~/api/user/add" :
Cette route permet d'ajouter un utilisateur à la base de donnée en utilisant la méthode POST
Elle prend en paramètre un username passé dans le header de la requête.
4- [PUT] "http://~/api/user/update":
Cette route permet de modifier les informations d'un utilisateur dans la base de donnée en utilisant la méthode PUT
Elle prend en paramètre un objet user sous format JSON dans le body de la requête.
5- [DELETE] "http://~/api/user/delete/{id}":
Cette route permet de supprimer un utilisateur de la base de donnée en utilisant la méthode DELETE
Elle prend l'id de l'utilisateur à supprimer comme paramètre dans l'URL de la requête.
6- [GET] "http://~/api/connexion/":
Cette route permet de récupérer l'ensemble des correspendances des user-token générées.
7- [POST] "http://~/api/connexion/auth":
Cette route permet à un utilisateur dans la base de donnée de s'identifier.
Elle prend en paramètre un username et un mot de passe dans le header de la requête.
Elle renvoie le token généré.
8- [POST] "http://~/api/connexion/isauth":
Cette route permet de générer le token d'un utilisateur. Cela permettra de vérifier si un utilisateur est bien authentifié.
Elle prend en paramètre un username et son token passé dans le header de la requête.
Elle renvoie 'TRUE' si l'utilisateur est bien connecté sinon elle retourne 'FALSE' .
9- [DELETE] "http://~/api/connexion/decon":
Cette route permet à un utilisateur de ce déconnecter.
Elle prend en paramètre un username et son token passé dans le header de la requête.
Elle renvoie 'TRUE' si la déconnection s'est bie npassé sinon elle renvoie 'FALSE' .
Le model utilisé dans ce projet est constitué de la classe USERS.
public class Users {
@Id
@Column(name="id")
private long id;
@Column(name="username")
@JsonProperty(value = "username")
private String username;
@Column(name="passwords")
@JsonIgnore
private String passwords;
@Column(name="email")
@JsonProperty(value = "email")
private String email;
@Column(name="firstname")
@JsonProperty(value = "firstname")
private String firstname;
@Column(name="lastname")
@JsonProperty(value = "lastname")
private String lastname;
@Column(name="country")
@JsonProperty(value = "country")
private String country;
}
Dans ce projet deux services différents coexistent pour gérer les différentes requêtes décrites.
Le service UserService
@RestController
@RequestMapping(value="/user")
public class UserService {
@Autowired
UserRepository userrepo;
@RequestMapping(value="/",method = RequestMethod.GET)
@ResponseBody
public List<Users> getAllUsers(){...}
@RequestMapping(value="/{id}",method = RequestMethod.GET,produces={"application/json"})
@ResponseBody
public Users getUser(@PathVariable long id){...}
@RequestMapping(value="/add",method = RequestMethod.POST)
public Users addUser(@RequestParam(value="username") String username){...}
@RequestMapping(value="/update",method = RequestMethod.PUT)
public Users updateUser(@RequestBody Users user) throws Exception {...}
@RequestMapping(value="/delete/{id}",method = RequestMethod.DELETE)
public List<Users> deleteStudent(@PathVariable long id) throws Exception {...}
}
Le service ConnexionService
@RestController
@RequestMapping(value="/connexion")
public class ConnexionService {
@Autowired
UserRepository userrepo;
private static HashMap<String,String> tokens= new HashMap<String,String>();
@RequestMapping(value="/",method = RequestMethod.GET)
public HashMap<String,String> getAllTokens(){...}
@RequestMapping(value="/auth",method = RequestMethod.POST)
public String Authentification(@RequestParam(value="username") String username,@RequestParam(value="password") String password){...}
@RequestMapping(value="/isauth",method = RequestMethod.POST)
public boolean isAuthentified(@RequestParam(value="username") String username,@RequestParam(value="token") String token){...}
@RequestMapping(value="/decon",method = RequestMethod.DELETE)
public boolean Deconnecte(@RequestParam(value="username") String username,@RequestParam(value="token") String token){...}
private static String generatetoken() {...}
}
La base de données a été géré par le moteur de base de données en mémoire H2. Les fichiers schema.sql et data.sql permettent d'initialiser la base de données à chaque déployement.
La classe UserRepository représente l'interface DAO responsable de la connexion à la base de données.
public interface UserRepository extends JpaRepository<Users, Long> {
@Modifying
@Transactional
@Query(value="delete from Users u where u.id = ?1")
void deleteById(Long id);
@Query(value="select u from Users u where u.username= ?1 and u.passwords = ?2")
Users getByUserNameandPassword(String username, String password);
@Query(value="select u from Users u where u.username= ?1")
Users getByUserName(String username);
}