IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Problème avec spring security: les pages sécurisées ne s'ouvrent pas même pour les utilisateurs recommendés


Sujet :

Spring Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut Problème avec spring security: les pages sécurisées ne s'ouvrent pas même pour les utilisateurs recommendés
    Bonjour a tous. Dans le souci de sécuriser l'application que j'ai développez grâce a Spring Boot 1.5.10 j'ai suivi un tutoriel. Pour l'instant mes utilisateurs sont en mémoire avec la technique InMemoryAuthentication et j'ai redefini les méthodes protected void configure(AuthenticationManagerBuilder auth) throws Exception et protected void configure(HttpSecurity http) throws Exception de la classe WebSecurityConfigurerAdapter.
    mais lors de l'exécution j'ai bel et bien des erreurs signaler sur la page web pour les utilisateurs non existant mais pour ceux qui existe j'ai une erreur 403 forbidden concernant csrf. Quand je le desactive avec http.csrf().disable(); je reussi pas toujours à ouvrir la page securiser même avec l'utilisateur qui possède le bon rôle.
    J'ai donc besoin d'aide pour reussir a debloquer cette situation. Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut precision supplementaire
    ci-joint le contenu de la classe qui me permet de personnaliser la securite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    /**
     * 
     */
    package org.schoolmind.config;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
     
    /**
     * @author cedrickiadjeu
     *
     */
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter{
     
    	@Autowired
    	private SimpleAuthenticationSuccessHandler successHandler;
     
     
    	@Override
    	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    		auth.inMemoryAuthentication().withUser("admin").
    			password("12345").roles("ADMIN");
    	}
     
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
    		http.formLogin();
     
    		http.authorizeRequests().antMatchers("/schoolmind/indexAdmin")
    		.hasRole("ADMIN").anyRequest().authenticated();
    		http.authorizeRequests().antMatchers("/schoolmind/index").permitAll();
    		http.csrf().disable();
     
    	}
     
    }
    Donc le problème est que quand je me connecte avec login=admin et password=12345 je ne suis pas rediriger vers la page /schoolmind/indexAdmin comme indique dans la config mais plutot vers une erreur

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Relisez les exemples dans le code source de HttpSecurity.java...

    La configuration se fait par chaînage des appels : pas en recommençant à chaque ligne...

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut plus d'éclairage
    Merci déjà de votre réaction mais je comprend pas vraiment ce que vous me proposez en me disant de Relisez les exemples dans le code source de HttpSecurity.java...
    S'il vous plait plus ample explication sans vouloir vous vexez bien sur

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    relisez les exemples et comparez avec ce que vous faites : vous verrez bien que, si cela ressemble beaucoup, il y a une différence de taille… et je vous l'ai dit dans le post précédent.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut
    J'ai regarde encore un autre tuto et j'ai modifie ma classe de configuration de spring security comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    package org.schoolmind.config;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
     
    /**
     * @author cedrickiadjeu
     *
     */
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter{
     
    	@Override
    	protected void configure(HttpSecurity http) throws Exception {
    		http.csrf().disable();
    		http
    			.authorizeRequests()
    				.antMatchers( "/schoolmind/index").permitAll()		
    				.antMatchers("/schoolmind/indexAdmin").hasRole("ADMIN")			
    				.and()
    			.formLogin();
    				//.loginPage("/login").failureUrl("/login-error");	
    	}
     
    	@Autowired
    	public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    		auth
    			.inMemoryAuthentication()
    			.withUser("user").password("12345").roles("ADMIN");
    	}
     
     
    }
    Mais lorsque je demande la page j'obtiens une erreur 404
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    There was an unexpected error (type=Not Found, status=404).No message available
    alors qu'en désactivant la sécurité sur la page en question elle s'affiche sans problème.
    Donc je reste toujours coincé déjà que je ne sais même pas si l'authentification a reussi ou pas.
    Voila mon controleur au cas ou l'erreur pourrait venir de la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    /**
     * 
     */
    package org.schoolmind.web;
     
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
     
    /**
     * @author cedrickiadjeu
     *
     */
    @Controller
    @RequestMapping(value="/schoolmind")
    public class IndexController {
     
    	@RequestMapping(value="/index")
    	public String index(@RequestParam(name="lang" ,defaultValue="fr")String lang){
    		return "index";   
    	}
     
    	@RequestMapping(value="/indexAdmin", method=RequestMethod.GET)
    	public String indexAdmin(@RequestParam(name="lang" ,defaultValue="fr")String lang){
    		return "indexAdmin";   
    	}
     
    }
    Tres simpliste puisque mon but est juste de tester spring security avant de l'utiliser dans mon application

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut specification
    J'ai même encore chaînée les méthodes comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http.csrf().disable().authorizeRequests().antMatchers("/schoolmind/indexAdmin").hasAnyRole("admin","user").and().formLogin();
    dans la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Override
    	protected void configure(HttpSecurity http) throws Exception {
    Mais jusque la je continue de tomber sur la page d'erreur 404 pourtant en utilisant permitAll j'accède à toutes mes pages sans souci. besoin d'explication s'il vous plait

  8. #8
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Par défaut
    Citation Envoyé par kiadjeuc Voir le message
    J'ai même encore chaînée les méthodes comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http.csrf().disable().authorizeRequests().antMatchers("/schoolmind/indexAdmin").hasAnyRole("admin","user").and().formLogin();
    dans la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Override
    	protected void configure(HttpSecurity http) throws Exception {
    Mais jusque la je continue de tomber sur la page d'erreur 404 pourtant en utilisant permitAll j'accède à toutes mes pages sans souci. besoin d'explication s'il vous plait
    Tu peux mettre le code de la classe SecurityConfig au complet stp?
    Parce que là, il y a pas de permitAll.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Par défaut reponse
    finalement je pense qu’étant sur spring boot 2.0.0 les choses ont évolué et je me suis pas très bien adapté vue que ma connaissance du framework reste encore très éphémère. Voici comment j'ai finalement déclarer les utilisateurs en mémoire pour voir les choses marché:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth)
        		throws Exception {
     
        	UserBuilder users = User.withDefaultPasswordEncoder();
     
            auth.inMemoryAuthentication()
            		.withUser(users.username("users").password("pass").roles("USER"));
            auth.inMemoryAuthentication()
            	.withUser(users.username("admin").password("12345").roles("ADMIN"));
            auth.inMemoryAuthentication()
        		.withUser(users.username("user").password("p1").roles("USER"));
     
     
     
     
        }
    et comme demandé voici le code complet de ma configuration personnalisé de spring security
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
     
    package org.schoolmind.security;
     
    import javax.sql.DataSource;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.core.userdetails.User;
    import org.springframework.security.core.userdetails.User.UserBuilder;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.crypto.password.NoOpPasswordEncoder;
    import org.springframework.security.crypto.password.PasswordEncoder;
    import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
    import org.springframework.security.crypto.password.StandardPasswordEncoder;
    import org.springframework.security.provisioning.InMemoryUserDetailsManager;
    import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
    import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler;
     
    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    	@Autowired
    	DataSource dataSource;
     
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                	.antMatchers("/").permitAll()
                    .antMatchers("/index").permitAll()
                    .antMatchers("/hello").hasAnyRole("admin","proviseur")
                    .antMatchers("/home").hasAnyRole("user","proviseur")
                    /*.anyRequest().authenticated()*/ 
                    .and()
                .formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .defaultSuccessUrl("/index")
                    /*.failureForwardUrl("/login")*/
                    .and()
                .logout()
                    .permitAll()
                    .logoutSuccessUrl("/login?logout");
        }
     
        @Autowired
        public void configureGlobal(AuthenticationManagerBuilder auth)
        		throws Exception {
     
        	UserBuilder users = User.withDefaultPasswordEncoder();
     
            auth.inMemoryAuthentication()
            		.withUser(users.username("users").password("pass").roles("USER"));
            auth.inMemoryAuthentication()
            	.withUser(users.username("admin").password("12345").roles("ADMIN"));
            auth.inMemoryAuthentication()
        		.withUser(users.username("user").password("p1").roles("USER"));
     
     
        }
     
     
    }
    les choses fonctionnent maintenant a peu près comme je l'ai souhaité. j'espère que j'ai pas été trop ennuyeux et que cette discussion peut aider d'autres débutant comme moi. Merci encore a tout ceux qui m'ont prêté un peu de leur précieux temps.

Discussions similaires

  1. Empêcher l'accès à une page jsf avec spring security
    Par mounitahard dans le forum Spring
    Réponses: 1
    Dernier message: 02/06/2014, 11h43
  2. [Framework] Problèmes avec Spring et les transactions.
    Par balteo dans le forum Spring
    Réponses: 0
    Dernier message: 27/04/2011, 18h55
  3. Réponses: 1
    Dernier message: 06/03/2011, 16h54
  4. Réponses: 5
    Dernier message: 07/09/2009, 09h16
  5. [SP-2007] les résultats de recherche ne sont pas identiques pour deux utilisateurs
    Par hassine dans le forum SharePoint
    Réponses: 5
    Dernier message: 07/09/2009, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo