M2

Petits trucs pour le TP

Mise en place d'une instance MySQL sur RDS

Pour mettre en place la base de données, il faut créer une instance MySQL sur RDS AWS. Ensuite, tout est expliqué ici pour mettre en place la connexion dans l'application Spring.

Pour trouver l'URL de connexion à mettre dans application.properties, il faut aller dans le menu "Instances" une fois dans le tableau de bord RDS, ensuite cliquer sur l'instance à utiliser et descendre jusqu'à la section "Connexion". L'addresse à utiliser est sous le titre "Point de terminaison".

Le fichier doit avoir une tête de se genre là :

spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://[ADRESSE AMAZON]:3306/[BDD]
spring.datasource.username=mouloud
spring.datasource.password=s3cr3t

Attention : Il faut utiliser la même version de MySQL entre l'instance AWS et celle que vous avez sur votre PC.

Attention : Pour ceux qui sont sous Linux ou macOS avec Homebrew, possible que les paquets MySQL n'installent pas MySQL mais MariaDB. Il faut taper mysql --version dans un terminal, la sortie aura cette gueule là si c'est du MariaDB :

mysql  Ver 15.1 Distrib 10.2.13-MariaDB, for osx10.13 (x86_64) using readline 5.1

Les compatibilités entre les versions MySQL pour MariaDB :

Le gros problème c'est que si l'instance AWS et le client sont pas compatibles, le message d'erreur est pas du tout explicite (i.e. ACCESS DENIED ...).

Composant security

Pour la partie connexion/authentification, il faut utiliser le composant security de Spring apparemment. Le guide pour savoir comment l'utiliser est ici.

Petit truc en plus, avec la configuration qui est donnée dans le guide, il n'y a pas moyen d'accéder aux URLs avec un verbe HTTP POST. Du coup, pour palier à ce problème, il faut changer la configuration dans la classe WebSecurityConfig en rajoutant la ligne surlignée :

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .csrf().disable()
        .authorizeRequests()
            .antMatchers("/", "/home").permitAll()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll();
}

Gestion des vues / redirection

Dans une méthode de contrôleur, le retour de la méthode détermine ce que Spring va faire une fois l'action terminée. Par exemple :

@GetMapping("/prout")
public String prout() {
    return "prout/template";
}

Accéder à l'URL /prout, va rendre la vue template contenue dans le dossier prout.

Pour faire une redirection :

@GetMapping("/prout")
public String prout() {
    return "redirect:/";
}

Accéder à l'URL /prout va rediriger vers la page d'accueil du site.