2014-10-25 7 views
17

Ich habe Spring WebMVC-Anwendung mit @PreAuthorize und Annotationen auf den Controller-Methoden. Aber diese Anmerkungen werden ignoriert, da ich sie nicht in meiner Federsicherheit aktiviert habe.Aktivieren Sie Spring Security vor-Post-Annotationen programmatisch

Wenn ich ein spring-security.xml habe ich es mit der folgenden Zeile ermöglichen könnte:

<global-method-security pre-post-annotations="enabled" /> 

Leider habe ich eine komplette Annotation-basierte Konfiguration. Spring-Security funktioniert prinzipiell in meiner Applikation.

Meine Frage: Wie kann ich Pre-Post-Annotation mit einer Annotation-basierten MVC-Konfiguration aktivieren?

  • Frühlings-Version: 4.0.5.RELEASE
  • Frühlings-Sicherheit-Version: 3.2.4.RELEASE

Dies ist meine WebSecurityConfigurerAdapter Umsetzung:

@Configuration 
@EnableWebMvcSecurity() 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired DataSource dataSource; 
    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.jdbcAuthentication() 
      .dataSource(dataSource) 
      .passwordEncoder(new ShaPasswordEncoder(256)) 
      .usersByUsernameQuery("select username,password, enabled from user where USERNAME=?") 
      .authoritiesByUsernameQuery("select u.username, r.name from user u, role r, user_has_role uhr where u.id = uhr.user_id and r.id = uhr.role_id and u.username = ? "); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .authorizeRequests() 
       .antMatchers("/resources/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .defaultSuccessUrl("/", true) 
       .and() 
      .logout() 
       //.logoutUrl("/logout") //this is the default 
       // Call the URL invalidate_session after logout... 
       .logoutSuccessUrl("/invalidate_session") 
       .permitAll() 
       .and() 
       // @see http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#csrf-configure 
      .csrf().disable(); 
    } 
} 

Meine MessageSecurityWebApplicationInitializer ist leer:

public class MessageSecurityWebApplicationInitializer extends 
     AbstractSecurityWebApplicationInitializer { 

} 

Antwort

35

Ich musste die folgende Annotation der Konfigurationsklasse hinzufügen: @EnableGlobalMethodSecurity(prePostEnabled=true)