2013-12-11 7 views
1

Я использую Spring Data REST и у меня есть метод найти в моем хранилище:Spring Security/rolesAllowed/antMatchers

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-адрес подходит отлично, хотя пользователь в БД не имеет роли «ADMIN».

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

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

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

благодаря

ответ

5

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

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

} 

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

Смежные вопросы