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

Я создал @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 ответ

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

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

Другие вопросы по тегам