Bonjour,

J'ai fait l'autorisation d'accéder à des ressources pour chaque utilisateurs de la BD avec spring security:

Ce que je fais

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter{
     @Autowired
     protected void globalConfig(AuthenticationManagerBuilder auth, DataSource dataSource) throws Exception {
     //auth.inMemoryAuthentication().withUser("user").password("123").roles("USER");
         auth.jdbcAuthentication()
             .dataSource(dataSource)
             .usersByUsernameQuery("select username as principal, password as credentials, etat as actived from utilisateurs where username=?")
             .authoritiesByUsernameQuery("select u.username as principal, ur.nom_role as role from utilisateurs u inner join roles ur on(u.roles_id=ur.id_role) where u.username=?")
             .rolePrefix("ROLE_");
     }

 protected void configure(HttpSecurity http) throws Exception {
          http
         .csrf().disable()
           .sessionManagement().maximumSessions(100).maxSessionsPreventsLogin(false).expiredUrl("/Login");
          http
           .authorizeRequests()
           .antMatchers("/AppJS/**","/images/**","/pdf/**","/Template/**","/Views/**","/MainApp.js").permitAll()
           .antMatchers("/Users/**").access("hasRole('ADMIN')")
           .antMatchers("/Dashbord/**").access("hasRole('ADMIN')")
           .antMatchers("/Login*").anonymous()
           .anyRequest().authenticated()
           .and()
         .formLogin().loginPage("/Login").permitAll()
           .defaultSuccessUrl("/home")
           .failureUrl("/Login?error=true")
           .and().exceptionHandling().accessDeniedPage("/Access_Denied")
           .and()
         .logout()
            .invalidateHttpSession(true)
            .clearAuthentication(true)
            .logoutUrl("/logout")
            .permitAll()
           .logoutSuccessUrl("/Login");

     }

}

Par la suite, j'ai spécifié les views pour chaque URL:

@Configuration
public class MvcConfig  extends WebMvcConfigurerAdapter{
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
      registry.addViewController("/Login").setViewName("Login");
       registry.addViewController("/Dashbord").setViewName("home");
       registry.addViewController("/logout").setViewName("Login");
       registry.addViewController("/Users").setViewName("Views/ListUsers");
    }
}

J'ai utilisé le AngularJS routeProvider pour garder la trace des URL:

var app = angular.module('Mainapp', ['ngRoute','file-model','ui.bootstrap','ngMessages']);
app.config(function($routeProvider) {
    $routeProvider
        .when('/Users', {
                controller:'UsersController', 
                templateUrl: 'Views/ListUsers'
        })     
      .when('/Dashbord', {
              controller: 'ResultController',
             templateUrl: 'Views/home.html'
        });  
});

Ce que je veux

Comment faire le lien de l'autorisation des accès à des ressources que je défini dans le back-office (spring security) avec les URL de AngularJS($routeProvider).

J'ai pas trouvé la bonne solution,

Merci de m'aider mes amis,

2 réponses


salut avez vous trouvez la solution j aurai bien savoir si vouas avez trouvez la solution a cette roblematique

Bonsoir,

pourrais-tu clarifier un peu ton besoin?
Tu emploies le mot ressource mais s'agit-il de ressources au sens fichier statique du terme ou bien de ressource au sens point d'entrée d'API ?
Par ailleurs , je ne sais pas quel architecture tu as mis en place mais à ce que je constate tu utilises une authentification par roles, stockés dans la session, as-tu vraiment besoin d'une session?

Ensuite, concernant le routing, si tu utilises spring mvc, celui-ci te met à disposition un dispatcherServlet qu'il est possible, une fois lui avoir indiqué les packages à scanner et quels pattern d'url envoyés sur celle-ci de simplement utiliser les annotations @RestController et @RequestMapping à l'intérieur pour configurer les routes.
En principe il te suffit d'indiquer la bonne url d'appel côté angularsJs pour joindre cette servlet.L'annotation @Secured te permettra alors de faire le lien avec les rôles utilisateurs en implémentant l'interface qui va bien et en filant ce bean à Spring.