Я создал @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();
}
}