2017-10-12 1 views
-1

J'utilise la botte à ressort 2 avec sécurité de ressort.La botte à ressort avec annotation de sécurité n'est pas prise en compte

J'ai divisé la sécurité pour le repos et le mvc.

@EnableWebSecurity 
public class MultiHttpSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Bean 
    public PasswordEncoder passwordEncoder() { 
     return new BCryptPasswordEncoder(); 
    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder()); 
    } 

    @Configuration 
    @Order(1) 
    public class RestWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
        .antMatcher("/rest/**") 
        .authorizeRequests() 
        .anyRequest().authenticated() 
        .and() 
        .httpBasic().and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().csrf().disable(); 
     } 
    } 

    @Configuration 
    @Order(2) 
    public class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
        .authorizeRequests() 
        .antMatchers("/css/**", "/js/**", "/img/**", "/").permitAll() 
        .anyRequest().authenticated() 
        .and() 
        .formLogin().loginPage("/login").permitAll().successHandler(new CustomAuthenticationSuccessHandler()) 
        .and() 
        .logout() 
        .logoutUrl("/logout") 
        .logoutSuccessHandler(new CustomLogoutHandler()) 
        .and().csrf().disable(); 
     } 
    } 
} 

Mon rôle dans db sont

super-utilisateur, admin, intégrateur.

Dans l'un de mon contrôleur de repos, je mis

@Secured("hasRole('user')") 

Ce rôle n'existent pas dans ma demande.

J'ai essayé avec un utilisateur qui ont un rôle: super-utilisateur et intégrateur et qui a fonctionné ...

Même chose avec

@PreAuthorize("hasAuthority('user')") 

est-il une autre configuration à faire?

+1

Copie possible de [Comment activer les annotations sécurisées avec la configuration Java?] (Https://stackoverflow.com/questions/24865588/how-to-enable-secured-annotations-with-java-based-configuration) – dur

Répondre

2

Afin de vous assurer que vous avez des méthodes pour permettre la sécurité de la méthode en utilisant l'annotation @EnableGlobalMethodSecurity.

@Configuration 
@EnableGlobalMethodSecurity(prePostEnabled=true) 
public class HelloMethodSecurityConfig { 

    @Bean 
    public MethodSecurityService methodSecurityService() { 
     return new MethodSecurityServiceImpl(); //Class managed by Spring 
    } 

    @Autowired 
    public void registerGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER").and() 
      .withUser("admin").password("password").roles("USER", "ADMIN"); 
    } 

} 

Avec la configuration minimale ci-dessus, les méthodes de la classe MethodSecurityService peuvent maintenant être sécurisées avec la sécurité de la méthode.

Pour plus de sécurité de méthode personnalisée, vous devrez étendre GlobalMethodSecurityConfiguration.

Consultez le document officiel docs.