Spring Security/rolesAllowed/antMatchers

Я использую Spring Data REST, и у меня есть метод поиска в моем репозитории:

public List<Contact> findByLastNameOrderByLastNameAsc(@Param("lastName") String lastName);

Я пытаюсь добавить безопасности к методу, но безуспешно. В моей БД у меня есть 1 пользователь с ролью «ROLE_USER». Когда служба запускается, появляется форма входа, и я могу войти в систему с учетными данными в БД.

Вот моя конфигурация веб-безопасности:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

    auth.jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery("select username,identification,enabled from users where username = ?");


  }

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .authorizeRequests()
    .antMatchers("/contacts/findByLastNameOrderByLastNameAsc").hasRole("ADMIN")
    .antMatchers("/contacts/**").fullyAuthenticated()
    .antMatchers("/contacts/**").hasRole("USER")
    .anyRequest().authenticated()

    .and()
     .formLogin();
}

Когда я пытаюсь вызвать службу в своем репозитории, я не вижу ошибок аутентификации. В моем браузере URL-адрес отображается нормально, хотя у пользователя в БД нет роли «АДМИНИСТРАТОР».

Я попытался добавить «RolesAllowed» к методу в моем репозитории, но безуспешно:

@RolesAllowed(value = { "ADMIN" })
public List<Contact> findByLastNameOrderByLastNameAsc(@Param("lastName") String lastName);

Собираюсь ли я правильно добавить безопасность в REST API, предоставляемый Spring Data? Идеи о том, как заставить это работать?

Спасибо


person user1459641    schedule 11.12.2013    source источник


Ответы (1)


FWIW: я забыл добавить поддержку jsr250. Итак, я добавил этот конфиг:

@Configuration
@EnableGlobalMethodSecurity(jsr250Enabled = true)
public class MethodSecurityConfig {

}

Теперь аннотация RolesAllowed работает нормально.

person user1459641    schedule 13.12.2013