web-dev-qa-db-ja.com

プログラムでSpringSecurityの前後の注釈を有効にする

Controller-methodsで@PreAuthorizeおよび@PostAuthoriceアノテーションを使用するSpringWebMVCアプリケーションがあります。ただし、Spring Securityで有効にしていないため、これらの注釈は無視されます。

spring-security.xmlがある場合は、次の行で有効にできます。

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

残念ながら、私は完全なアノテーションベースの構成を持っています。 Spring-Securityは原則として私のアプリケーションで機能します。

私の質問:アノテーションベースのMVC構成でプレポストアノテーションを有効にするにはどうすればよいですか?

  • Spring-バージョン:4.0.5.RELEASE
  • Spring-Security-Version:3.2.4.RELEASE

これは私のWebSecurityConfigurerAdapter実装です:

@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();
    }
}

私のMessageSecurityWebApplicationInitializerは空です:

public class MessageSecurityWebApplicationInitializer extends
        AbstractSecurityWebApplicationInitializer {

}
24
Tarator

次のアノテーションをConfigurationクラスに追加する必要がありました:@EnableGlobalMethodSecurity(prePostEnabled=true)

53
Tarator