Spring Security 5.1.0 @Query () для findAll () с пользовательским основным объектом, выдающим 500 внутренних ошибок сервера - PullRequest
0 голосов
/ 27 сентября 2018

Я создал @Filter и включил его в свою цепочку фильтров в своем классе WebSecurityConfig как таковом

httpSecurity
.addFilterBefore(new JWTFilter(jwtService, exceptionController), UsernamePasswordAuthenticationFilter.class);

В моем JWTFilter я установил SecurityContextHolder авторизацию на UsernamePasswordAuthenticationToken с пользовательским объектом UserInfo как таковым

UserInfo userInfo = this.service.getUserFromToken(token);
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userInfo, null, authorities);

authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(req));

SecurityContextHolder.getContext().setAuthentication(authentication);

Я пытаюсь использовать язык выражений в моем InvoiceRepository для фильтрации моего findAll() по моему зарегистрированному пользователю с запросом как таковым

@Query("select i from Invoice i where supplyId in ?#{ principal?.supplier.supplyId }")
Iterable<Invoice>findAll()

Это ошибка, которую я получаю

java.lang.AbstractMethodError: org.springframework.security.data.repository.query.SecurityEvaluationContextExtension.getFunctions()Ljava/util/Map;

Я проверил, используя @Controller, чтобы убедиться, что SecurityContextHolder.getContext().getAuththentication() устанавливается и так оно и есть.Он возвращает мой UsernamePasswordAuthenticationToken объект с моим основным присоединенным и может быть приведен к UserInfo.

Я включил этот класс

@Configuration
@EnableAutoConfiguration
public class SecurityConfiguration {
    @Bean
    EvaluationContextExtension securityExtension() {
        return new SecurityEvaluationContextExtension();
    }
}

1 Ответ

0 голосов
/ 27 сентября 2018

Проблема решена.Как упоминал М. Дейнм, я смешивал разные версии зависимостей Spring-Boot и Spring-Security.

Я удалил все зависимости Spring-Security, добавил последнюю версию spring-boot-starter-security, соответствующую моей версии spring-boot, и добавил spring-security-data 5.0.8.RELEASE, которая соответствует версиям Spring-Security, которые реализовывал spring-boot-starter-security.spring-security-data автоматически настраивает SecurityEvaluationContextExtension без необходимости создания собственного класса SecurityConfiguration.С оставленным на месте SecurityConfiguration выдает ошибку, что было два SecurityEvaluationContextExtensions, удаление SecurityEvaluationContextExtension из SecurityConfiguration решило эту проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...