Я использую 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? Идеи о том, как заставить это работать?
Спасибо