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

希望这有助于:)