/Student-MVC-Spring

une application Web basée sur Spring MVC, Spring Data JPA et Spring Security qui permet de gérer des étudiants.

Primary LanguageHTMLMIT LicenseMIT

Activité Pratique Spring MVC, Spring Data JPA, Spring Security 🎓💻

1.Présentation de l'activité pratique

  • Il s’agit d'une application Web basée sur Spring MVC, Spring Data JPA et Spring Security qui permet de gérer des étudiants.

Entités et règles de gestion : 🏷️

L’application devra gérer quatre entités. Les entités utilisées dans l’application sont :


Une entité "Student" qui comporte les propriétés suivantes :

  • Son id
  • Son nom
  • Son prénom
  • Son email
  • Sa date naissance
  • Son genre : MASCULIN ou FEMININ
  • Un attribut qui indique si il est en règle ou non
@Entity
@Data @AllArgsConstructor @NoArgsConstructor
public class Student {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotEmpty
    @Size(min = 3, max = 50)
    private String nom;
    @Size(min = 3, max = 50)
    private String prenom;
    private String email;
    @Temporal(TemporalType.DATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date dateNaissance;
    @Enumerated(EnumType.STRING)
    private Gender genre;
    private Boolean enRegle;
}

les fonctionnalités de l'application 🏷️

L'application offre les fonctionnalités suivantes :

1. Chercher des étudiants par nom.

2. la pagination entre les une taille bien précis des étudiants.

3. La suppression des étudiants en utilisant la méthode (DELETE au lieu de GET).

4. Le Saisi et l'ajout des étudiants avec validation des formulaires.

5. L'édition et la mis à jour des étudiants.

6. La Création d'une page template.

La sécurité avec Spring Security 🏷️

L'accès à l'application est sécurisée avec un système d'authentification basé sur Spring security en utilisant la stratégie User Details Service:

La classe implémentation de UserDetailsService 'UserDetailsServiceImpl'

@Service
public class UserDetailsServiceImpl implements UserDetailsService {
    @Autowired
    private SecurityService securityService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        AppUser appUser = securityService.loadUserByUsername(username);
        //en utilisant l'API des streams
        Collection<GrantedAuthority> authorities1 = appUser
                .getAppRoles()
                .stream()
                .map(role-> new SimpleGrantedAuthority(role.getRoleName()))
                .collect(Collectors.toList());

        User user = new User(appUser.getUsername(),appUser.getPassword(),authorities1);
        return user;
    }
}

La classe de configuration de la sécurité

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private DataSource dataSource;
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private UserDetailsServiceImpl userDetailsService;
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //user details service auth
        auth.userDetailsService(userDetailsService);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin();
        //ne nécessite pas une auth
        http.authorizeRequests().antMatchers("/").permitAll();
        http.authorizeRequests().antMatchers("/admin/**").hasAnyAuthority("ADMIN");
        http.authorizeRequests().antMatchers("/user/**").hasAnyAuthority("USER");
        http.authorizeRequests().antMatchers("/webjars/**").permitAll();
        /*gérer les droits d'accés*/
        //toutes les req nécessite une auth
        http.authorizeRequests().anyRequest().authenticated();
        //gestion des exceptions
        http.exceptionHandling().accessDeniedPage("/403");
    }
}

Contraintes techniques 🏷️

Toutes les opérations d’ajout, de modification et de suppression ne peuvent se faire que par un utilisateur authentifié et ayant le rôle "ADMIN". Les utilisateurs anonymes auront accès à la page index seulement et toute opération ne va pas aboutir son objectif.

3.Les Technologies utilisées

1.Java

  • * Java est le langage de choix pour créer des applications à l'aide de code managé qui peut s'exécuter sur des appareils mobiles.

voir également à propos JAVA🔗

2.Spring MVC

  • Spring MVC permet de construire des applications Web en Java. ... (MVC) en association avec le modèle IoC (Inversion of Control) du Spring Framework.

voir également à propos de Spring MVC 🔗

3.Spring Data JPA

  • Spring Data JPA, qui fait partie de la grande famille Spring Data, facilite la mise en œuvre de référentiels basés sur JPA. Ce module traite de la prise en charge améliorée des couches d'accès aux données basées sur JPA. Il facilite la création d'applications alimentées par Spring qui utilisent des technologies d'accès aux données.

*voir également à propos de Spring Data JPA 🔗

4.MySQL

  • est un système de gestion de base de données relationnelle (SGBDR) open source. Son nom est une combinaison de "My", le nom de la fille du co-fondateur Michael Widenius, et de "SQL", l'abréviation de Structured Query Language. Une base de données relationnelle organise les données en une ou plusieurs tables de données dans lesquelles les types de données peuvent être liés les uns aux autres ; ces relations aident à structurer les données. SQL est un langage utilisé par les programmeurs pour créer, modifier et extraire des données de la base de données relationnelle, ainsi que pour contrôler l'accès des utilisateurs à la base de données. voir également à propos MySQL 🔗

5.Spring Security

  • Spring Security est un cadre d'authentification et de contrôle d'accès puissant et hautement personnalisable. C'est la norme de facto pour sécuriser les applications basées sur Spring.

  • Spring Security est un framework qui se concentre sur l'authentification et l'autorisation des applications Java. Comme tous les projets Spring, la véritable puissance de Spring Security réside dans la facilité avec laquelle il peut être étendu pour répondre aux exigences personnalisées.

*voir également à propos de * Spring Security 🔗

6.Thymeleaf

  • Thymeleaf est un moteur de modèle Java XML/XHTML/HTML5 qui peut fonctionner à la fois dans des environnements Web et non Web. Il est mieux adapté pour servir XHTML/HTML5 au niveau de la couche d'affichage des applications Web basées sur MVC, mais il peut traiter n'importe quel fichier XML même dans des environnements hors ligne. Il fournit une intégration complète de Spring Framework.

*voir également à propos de * Thymeleaf 🔗

4.Structure du projet

5.CONCEPTION & ANALYSES

  • Diagramme de classe

Diagramme de classe [color=#fd837b]


  • Diagramme de cas d'utilisation

Diagramme de cas d'utilisation [color=#fd837b]


6.comment ça marche ?

View de login par déafaut de Spring Security [color=#fd837b]


View home d'un utilisateur admin [color=#fd837b]


Formulaire d'ajout d'un étudiant [color=#fd837b]


Formulaire de mis à jour d'un étudiant [color=#fd837b]


View de consultation des données d'un étudiant [color=#fd837b]


recherche d'un étudiant par nom [color=#fd837b]


View du profile d'utilisateur

View home d'un utilisateur qui a le role 'USER' qui a le droit uniquement de consulter les étudiants [color=#fd837b]


View de la page 403

:::success Voilà ✅ :::

  • Enfin nous tenons à remercier le seul et unique, notre professeur Mr YOUSFI Mohamed Docteur & professeur à l'ENSET MEDIA pour son soutien et son encouragement envers nous, aussi pour nous avoir donné cette opportunité d'améliorer nos compétences et de connaître les nouvelles technologies comme celles qui nous avons travaillé.

voir également à propos Mr YOUSSFI Mohamed

Created by :[name=ELMAJNI KHAOULA] [time=Mon,2022,04,11][color=#EF0101] voir également à propos de moi ELMAJNI Khaoula