2016-10-27 32 views
1

發現我希望通過一個JPA查詢來獲取從CrudRepository數據爲RestResource春季安全主體不能從規劃環境地政司

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"/> 

希望這有助於:)