2016-10-27 3 views
1

Я хочу, чтобы получить данные из CrudRepository для RestResource с помощью JPA Query:основной Spring Security не может быть найден из SPEL

public interface IContactRepository extends PagingAndSortingRepository<Contact, Long> { 

    @Query("select contact from Contact contact where contact.owner.login = ?#{principal.username}") 
    @RestResource(path = "my") 
    List<Contact> findByOwner(); 
} 

Но я получаю это:

Свойство или поле «основной» не может можно найти на объекте типа 'java.lang.Object []' - может быть, не публично?

можно получить непосредственно принципал:

SecurityContextHolder.getContext().getAuthentication().getPrincipal() 

, но мне нужно это внутри интерфейса, чтобы получить прямой доступ к RestResource.

+0

См. Здесь. Loks, как будто вам нужна конфигурация, чтобы включить это. https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions#spel-evaluationcontext-extension-model –

ответ

4

Я столкнулся с той же проблемой, и я установил ее, выполнив:

обеспечивают боб типа SecurityEvaluationContextExtension

как documentation сказал.

Ниже Java и конфигурация XML из doc:

Конфигурация Java

@Bean 
public SecurityEvaluationContextExtension securityEvaluationContextExtension() { 
    return new SecurityEvaluationContextExtension(); 
} 

XML конфигурация

<bean class="org.springframework.security.data.repository.query.SecurityEvaluationContextExtension"/> 

Надеется, что это помогает :)

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